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
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.
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...
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.