<p>moment.tz.setDefault () es global y compartido por todos los módulos.</p>

Creado en 7 feb. 2017  ·  11Comentarios  ·  Fuente: moment/moment

La zona horaria predeterminada se comparte entre todos los 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);

Salida después de 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

Comentario más útil

¿Cómo soluciona exactamente el número 684 este problema? Es solo una actualización Léame para aclarar el comportamiento actual hasta donde puedo ver.

Todos 11 comentarios

¿Qué ambiente es este?

Nodo 4.7.3, ubuntu 14.04

Creo que deberíamos agregar una advertencia sobre esto en los documentos y no recomendar a los desarrolladores que no usen esta función en sistemas como node.
http://momentjs.com/timezone/docs/#/using -timezones / default-timezone /

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

moment.tz.setDefault () es obviamente un método de configuración global para el módulo moment.tz

No estoy seguro de si es correcto que requiera en el nodo solo el módulo de importación moment.timezone solo una vez en lugar de varias veces. Si es cierto, se espera el resultado del ejemplo.

@alburthoffman Sí, es el resultado esperado, pero creo que mucha gente puede tener problemas con esto en entornos de nodo cuando un módulo muy abajo en la lista de dependencias puede hacer algo con setDefault y tendrá un impacto en todos los módulos que requieren (' momento-zona horaria '). Pasé mucho tiempo antes de hacerlo bien.

Si están de acuerdo, ¿podemos agregar un texto de información como este: https://github.com/mashpie/i18n-node#example -usage-in-global-scope pero también podemos cerrar este problema cuando no es un error? .

Sería genial si pudiéramos tener algo como esto:

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

Y para que cada instancia de momento tenga su propia configuración local.

Esto también sería excelente para aplicaciones que usan Express, donde luego puede crear una instancia de momento para la duración de la solicitud, configurarla con una zona horaria global y estar seguro de que todo el resto de su middleware usará la zona horaria correcta.

En este momento, tenemos que establecer la zona horaria correcta literalmente en más de 100 lugares en nuestro código base, porque no podemos usar moment.tz.setDefault() .

¿Pensamientos?

Podrías hacerlo

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

@isair no funciona del todo:

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

Seguro, haremos un PR de documentación en https://github.com/moment/momentjs.com

@adamreisnz : presente un ticket para su solicitud de función en https://github.com/moment/moment-timezone

¿Cómo soluciona exactamente el número 684 este problema? Es solo una actualización Léame para aclarar el comportamiento actual hasta donde puedo ver.

¿Qué tal esto?

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

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

En lugar de establecer el valor predeterminado; podemos tener un moment para varias zonas horarias (por ejemplo, estMoment , mstMoment , pstMoment , etc.) y usarlo en todas partes. Por ex estMoment('2020-08-12'); lugar de moment('2020-08-12');

Buena suerte...

¿Fue útil esta página
0 / 5 - 0 calificaciones