<p>moment.tz.setDefault () é global e compartilhado por todos os módulos.</p>

Criado em 7 fev. 2017  ·  11Comentários  ·  Fonte: moment/moment

O fuso horário padrão é compartilhado entre todos os módulos:

server.js

var moment = require('moment-timezone');
console.log('sets timezone to Europe/Stockholm and locale to sv');
moment.tz.setDefault('Europe/Stockholm');
moment.locale('sv');

var moduleA = require('./moduleA');
var moduleB = require('./moduleB');

moduleA.js

var moment = require('moment-timezone');

setInterval(function () {
  console.log('Moment in moduleA', moment().format('MMMM Do YYYY, h:mm:ss a'));
}, 100)

moduleB.js

var moment = require('moment-timezone');

setInterval(function () {
  console.log('Moment in moduleB', moment().format('MMMM Do YYYY, h:mm:ss a'));
}, 100)

setInterval(function () {
  console.log('Changing timezone in moduleB  America/New_York locale en');
  moment.tz.setDefault("America/New_York");
  moment.locale('en');
}, 3000);

Saída após 3 segundos:

Moment in moduleA februari 8e 2017, 9:09:19 am Moment in moduleB februari 8e 2017, 9:09:19 am Moment in moduleA februari 8e 2017, 9:09:19 am Moment in moduleB februari 8e 2017, 9:09:19 am Changing timezone in moduleB America/New_York locale en Moment in moduleA February 8th 2017, 3:09:19 am Moment in moduleB February 8th 2017, 3:09:19 am Moment in moduleA February 8th 2017, 3:09:19 am

Documentation Loading Timezones Up-For-Grabs

Comentários muito úteis

Como exatamente o # 684 corrige esse problema? É apenas uma atualização readme para esclarecer o comportamento atual, tanto quanto posso ver.

Todos 11 comentários

Que ambiente é esse?

Nó 4.7.3, ubuntu 14.04

Acho que devemos adicionar um aviso sobre isso na documentação e não recomendar aos desenvolvedores que não usem esta função em sistemas como o node.
http://momentjs.com/timezone/docs/#/using -timezones / default-timezone /

Algo assim:
https://github.com/mashpie/i18n-node#example -usage-in-global-scope

moment.tz.setDefault () é obviamente um método de configuração global para o módulo moment.tz

Não tenho certeza se é correto exigir no nó apenas importar o módulo moment.timezone apenas uma vez em vez de várias vezes. Se for verdade, a saída de exemplo é esperada.

@alburthoffman Sim, é a saída esperada, mas acho que muitas pessoas podem ter problemas com isso em ambientes de nó quando um módulo muito abaixo na lista de dependências pode fazer algo com setDefault e terá um impacto em todos os módulos que requerem (' momento-fuso horário '). Passei muito tempo antes de acertar.

Se vocês concordarem, podemos adicionar um texto informativo como este: https://github.com/mashpie/i18n-node#example -usage-in-global-scope, mas também podemos fechar este problema quando não for um bug .

Seria ótimo se pudéssemos ter algo assim:

const momentFoo = require('moment-timezone').instance();
momentFoo.tz.setDefault('foo');

const momentBar = require('moment-timezone').instance();
momentBar.tz.setDefault('bar');

momentFoo.tz() === momentBar.tz() //false

E para cada instância de momento ter sua própria configuração local.

Isso também seria ótimo para aplicativos que usam o Express, onde você pode criar uma instância momentânea para a duração da solicitação, configurá-la com um fuso horário global e ter a certeza de que todo o restante do seu middleware usará o fuso horário correto.

No momento, temos que definir o fuso horário correto literalmente em mais de 100 lugares em nossa base de código, porque não podemos usar moment.tz.setDefault() .

Pensamentos?

Você poderia fazer

import moment from 'moment-timezone';
export default moment().tz('foo');
import momentFoo from '../somewhere/moment-foo';

@isair não funciona bem:

Uncaught TypeError: Object(...) is not a function

Claro, faremos um RP de documentação em https://github.com/moment/momentjs.com

@adamreisnz - https://github.com/moment/moment-timezone

Como exatamente o # 684 corrige esse problema? É apenas uma atualização readme para esclarecer o comportamento atual, tanto quanto posso ver.

Que tal agora?

const estMoment = (...args) => moment(...args).tz('America/New_York')

console.log(estMoment().toDate())
console.log(moment().toDate())

Em vez de definir o padrão; podemos ter moment para vários fusos horários (por ex. estMoment , mstMoment , pstMoment , etc) e usá-lo em todos os lugares. Para ex estMoment('2020-08-12'); vez de moment('2020-08-12');

Boa sorte...

Esta página foi útil?
0 / 5 - 0 avaliações