¿Cómo configuro la zona horaria predeterminada en node.js?
¿Cómo configuro la zona horaria predeterminada en node.js?
Respuestas:
De acuerdo con este hilo del grupo de Google , puede configurar la variable de entorno TZ antes de llamar a cualquier función de fecha. Solo lo probé y funciona.
> process.env.TZ = 'Europe/Amsterdam'
'Europe/Amsterdam'
> d = new Date()
Sat, 24 Mar 2012 05:50:39 GMT
> d.toLocaleTimeString()
'06:50:39'
> ""+d
'Sat Mar 24 2012 06:50:39 GMT+0100 (CET)'
Sin embargo, no puede cambiar la zona horaria más adelante, ya que para ese momento Node ya ha leído la variable de entorno.
process.env.TZ = 'Europe/Amsterdam'
"bien, ahora ¿dónde puedo encontrar una lista de todos los valores válidos que puedo establecer?" y no lo encuentro, cada vez.
zone.tab
archivo en ese archivo.
Otro enfoque que parecía funcionar para mí al menos en el entorno Linux es ejecutar su aplicación Node.js de esta manera:
env TZ='Europe/Amsterdam' node server.js
Esto debería al menos garantizar que la zona horaria esté configurada correctamente desde el principio.
Aquí hay un ejemplo 100% funcional para obtener la zona horaria personalizada Fecha Hora en NodeJs sin usar ningún módulo externo:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
Desafortunadamente, la configuración process.env.TZ
no funciona muy bien , básicamente es indeterminado cuándo será efectivo el cambio).
Por lo tanto, configurar la zona horaria del sistema antes de iniciar el nodo es su única opción adecuada.
Sin embargo, si no puede hacer eso, debería ser posible utilizar el tiempo de nodo como solución alternativa: obtenga sus horas en hora local o UTC y conviértalas a la zona horaria deseada. Consulte ¿Cómo usar el desplazamiento de zona horaria en Nodejs? para detalles.
La solución env TZ='Europe/Amsterdam' node server.js
de @uhef funciona en los casos en que su aplicación no funciona con el proceso bifurcado, pero cuando está trabajando con el proceso bifurcado, especialmente cuando inicia su aplicación con una herramienta de construcción como gulp , el comando gulp
tomará los valores env, pero El proceso creado por Gulp not (su aplicación).
Para resolver esto, tienes que hacer:
$ export TZ="Europe/Amsterdam"; gulp myTask
Esto establecerá la TZ
variable de entorno para todo el proceso iniciado en la consola en la que está trabajando, incluidos todos los procesos posteriores ejecutados después del comando gulp en la misma consola sin la necesidad de ejecutarlos export TZ="Europe/Amsterdam";
nuevamente con el prefijo .
Etc/UTC
También hay compensaciones específicas disponibles Etc
, pero el desplazamiento es inverso al que cabría esperar. Etc/GMT-1
es UTC + 1 hora. Verhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Establezca la zona horaria del servidor y use la sincronización NTP. Aquí hay una mejor solución para cambiar la hora del servidor.
Para enumerar zonas horarias
timedatectl list-timezones
Para configurar la zona horaria
sudo timedatectl set-timezone America/New_York
Verificar zona horaria
timedatectl
Prefiero usar la zona horaria UTC para mis servidores y bases de datos. Cualquier conversión debe ser manejada en el cliente. Podemos utilizar moment.js en el lado del cliente.
Será fácil mantener muchas instancias también,
Sé que este hilo es muy antiguo, pero creo que esto ayudaría a cualquiera que haya llegado aquí desde Google como yo.
En GAE Flex (NodeJs), puede establecer la variable de entorno TZ (la que administra todas las zonas horarias de fecha en la aplicación) en el archivo app.yaml, le dejo aquí un ejemplo:
app.yaml
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
Aquí hay una respuesta para aquellos que implementan una aplicación Node.js en Amazon AWS Elastic Beanstalk . No he visto esto documentado en ningún otro lugar:
Debajo Configuration -> Software -> Environment Properties
, simplemente establezca el par de valores clave TZ
y su zona horaria America/Los Angeles
, por ejemplo , y aplique el cambio.
Puede verificar el efecto imprimiendo new Date().toString()
en su aplicación Node y prestando atención al sufijo de zona horaria.
A partir del Nodo 13 , ahora puede configurarlo repetidamente process.env.TZ
y se reflejará en la zona horaria de los nuevos objetos Date. No sé si usaría esto en el código de producción, pero definitivamente sería útil en pruebas unitarias.
> process.env.TZ = 'Europe/London';
'Europe/London'
> (new Date().toString())
'Fri Mar 20 2020 09:39:59 GMT+0000 (Greenwich Mean Time)'
> process.env.TZ = 'Europe/Amsterdam';
'Europe/Amsterdam'
> (new Date().toString())
'Fri Mar 20 2020 10:40:07 GMT+0100 (Central European Standard Time)'
set TZ='UTC' node index.js
Puedes tomar la zona horaria del momento . Le permite establecer su ubicación y también se ocupa del horario de verano.
Date
otros módulos integrados.
A veces puede estar ejecutando código en un servidor virtual en otro lugar: eso puede ser confuso al ejecutar NODEJS u otros tipos.
Aquí hay una solución que le permitirá usar cualquier zona horaria fácilmente.
Consulte aquí para obtener una lista de zonas horarias
Simplemente ponga su frase de zona horaria dentro de los corchetes de su línea FORMAT.
En este caso, estoy convirtiendo EPOCH a Eastern.
//RE: https://www.npmjs.com/package/date-and-time
const date = require('date-and-time');
let unixEpochTime = (seconds * 1000);
const dd=new Date(unixEpochTime);
let myFormattedDateTime = date.format(dd, 'YYYY/MM/DD HH:mm:ss A [America/New_York]Z');
let myFormattedDateTime24 = date.format(dd, 'YYYY/MM/DD HH:mm:ss [America/New_York]Z');
yo trabajo con este paquete npm unix-system-timezone
Actualización para node.js v13
Como señaló @Tom, el soporte completo de icu está integrado en v13 ahora. Por lo tanto, los pasos de configuración pueden omitirse. Todavía puede personalizar cómo quiere construir o usar icu en tiempo de ejecución: https://nodejs.org/api/intl.html
Para node.js en Windows , puede hacer lo siguiente:
Instale full-icu si se ha instalado, que aplica las configuraciones regionales de fecha correctamente
npm i full-icu
o globalmente: npm i -g full-icu
Use toLocaleString () en su código, por ejemplo:
new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })
Esto producirá algo como: 25/02/2019, 3:19:22 pm
. Si prefiere 24 horas, 'en-GB' producirá:25/02/2019, 15:19:22
Para node.js como aplicación web de Azure , además de la configuración de la aplicación WEBSITE_TIME_ZONE, también debe configurar NODE_ICU_DATA para, por ejemplo,<your project>\node_modules\full-icu
, , después de haber realizado el npm i full-icu. No se sugiere instalar el paquete globalmente en Azure, ya que ese directorio es temporal y puede eliminarse.
Ref: 1. NodeJS no aplica las configuraciones regionales de fecha correctamente
Puede configurar la zona horaria global con la biblioteca tzdata:
npm install tzdata -y
Después de configurar su entorno con la variable, por ejemplo: TZ = America / Bogota
Y probando en su proyecto:
new Date()
Te espero
Puede aplicar la zona horaria del proceso Node.js configurando la variable de entorno TZ
enUTC
Entonces todo el tiempo se medirá en UTC + 00: 00
Lista llena: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Ejemplo package.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
solo establezca la variable de entorno en su archivo principal como index.js o app.js o main.js o el nombre de su archivo:
process.env.TZ = "Aisa/Tehran";
esto establecerá la zona horaria que se utilizará en toda su aplicación de nodo