Come posso impostare il fuso orario predefinito in node.js?
Come posso impostare il fuso orario predefinito in node.js?
Risposte:
Secondo questo thread di gruppo di Google , è possibile impostare la variabile di ambiente TZ prima di chiamare qualsiasi funzione di data. L'ho appena testato e funziona.
> 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)'
Tuttavia, non è possibile modificare il fuso orario in un secondo momento, poiché da allora Node ha già letto la variabile di ambiente.
process.env.TZ = 'Europe/Amsterdam'
penso "bello, ora dove posso trovare un elenco di tutti i valori validi che posso impostare?" e non lo trovo, ogni singola volta.
zone.tab
file in quell'archivio.
Un altro approccio che sembrava funzionare per me almeno in ambiente Linux è quello di eseguire l'applicazione Node.js in questo modo:
env TZ='Europe/Amsterdam' node server.js
Ciò dovrebbe almeno garantire che il fuso orario sia impostato correttamente già dall'inizio.
Ecco un esempio funzionante al 100% per ottenere la data e l'ora personalizzate del fuso orario in NodeJs senza utilizzare moduli esterni:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
Sfortunatamente, l' impostazione process.env.TZ
non funziona molto bene - in pratica è indeterminato quando la modifica sarà effettiva).
Quindi impostare il fuso orario del sistema prima di avviare il nodo è l'unica opzione corretta.
Tuttavia, se non riesci a farlo, dovrebbe essere possibile utilizzare nodo-orario come soluzione alternativa: ottenere i tuoi orari in ora locale o UTC e convertirli nel fuso orario desiderato. Vedi Come utilizzare la differenza di fuso orario in Nodejs? per dettagli.
La soluzione env TZ='Europe/Amsterdam' node server.js
di @uhef funziona nei casi in cui la tua app non funziona con il processo biforcato, ma quando lavori con il processo biforcato, specialmente quando avvii la tua app con uno strumento di costruzione come gulp , il comando gulp
prenderà i valori env, ma il processo creato da gulp non (la tua app).
Per risolvere questo, devi fare:
$ export TZ="Europe/Amsterdam"; gulp myTask
Questo imposterà la TZ
variabile d'ambiente per tutto il processo avviato nella console su cui stai lavorando, inclusi tutti i processi successivi eseguiti dopo il comando gulp nella stessa console senza la necessità di eseguirli export TZ="Europe/Amsterdam";
nuovamente con il prefisso .
Etc/UTC
Ci sono anche offset specifici disponibili in Etc
, ma l'offset è al contrario di quanto ci si aspetterebbe. Etc/GMT-1
è UTC + 1 ora. Vedihttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Imposta il fuso orario del server e usa la sincronizzazione NTP. Ecco una soluzione migliore per cambiare l'ora del server.
Per elencare i fusi orari
timedatectl list-timezones
Per impostare il fuso orario
sudo timedatectl set-timezone America/New_York
Verifica fuso orario
timedatectl
Preferisco usare il fuso orario UTC per i miei server e database. Qualsiasi conversione deve essere gestita sul client. Possiamo usare moment.js sul lato client.
Sarà facile mantenere anche molti casi,
So che questa discussione è molto vecchia, ma penso che questo aiuterebbe chiunque sia arrivato qui da Google come me.
In GAE Flex (NodeJs), puoi impostare la variabile ambientale TZ (quella che gestisce tutti i fusi orari nell'app) nel file app.yaml, ti lascio qui un esempio:
app.yaml
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
Ecco una risposta per coloro che implementano un'applicazione Node.js su Amazon AWS Elastic Beanstalk . Non l'ho visto documentato altrove:
Sotto Configuration -> Software -> Environment Properties
, imposta semplicemente la coppia di valori-chiave TZ
e il tuo fuso orario America/Los Angeles
, ad esempio , e Applica la modifica.
È possibile verificare l'effetto emettendo new Date().toString()
l'app Node e prestando attenzione al suffisso del fuso orario.
A partire dal Nodo 13 , ora puoi impostare più volte process.env.TZ
e si rifletterà nel fuso orario dei nuovi oggetti Data. Non so se lo userei nel codice di produzione, ma sarebbe sicuramente utile nei test unitari.
> 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
Puoi prendere il fuso orario del momento . Ti consente di impostare la tua posizione e si occupa anche dell'ora legale.
Date
o altri moduli integrati.
A volte potresti eseguire codice su un server virtuale altrove - Ciò può diventare confuso quando esegui NODEJS o altri sapori.
Ecco una correzione che ti permetterà di usare facilmente qualsiasi fuso orario.
Controlla qui per l'elenco dei fusi orari
Inserisci la frase del fuso orario tra le parentesi della riga FORMATO.
In questo caso, sto convertendo EPOCH in orientale.
//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');
lavoro con questo pacchetto npm unix-system-timezone
Aggiornamento per node.js v13
Come sottolineato da @Tom, il supporto completo per icu è ora integrato in v13. Quindi i passaggi di installazione possono essere omessi. Puoi comunque personalizzare il modo in cui vuoi creare o usare icu in runtime: https://nodejs.org/api/intl.html
Per node.js su Windows , è possibile effettuare le seguenti operazioni:
Installa full-icu se è stato installato, che applica correttamente le date locali
npm i full-icu
o globalmente: npm i -g full-icu
Usa toLocaleString () nel tuo codice, ad esempio:
new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })
Questo produrrà qualcosa come: 25/02/2019, 3:19:22 pm
. Se preferisci 24 ore, "en-GB" produrrà:25/02/2019, 15:19:22
Per node.js come app Web di Azure , oltre alle impostazioni dell'applicazione di WEBSITE_TIME_ZONE, devi anche impostare NODE_ICU_DATA su ad esempio <your project>\node_modules\full-icu
, ovviamente dopo aver eseguito npm i full-icu. L'installazione globale del pacchetto in Azure non è consigliata in quanto tale directory è temporanea e può essere cancellata.
Rif: 1. NodeJS non applica correttamente le date locali
Puoi configurare il fuso orario globale con la libreria tzdata:
npm install tzdata -y
Dopo aver impostato il tuo ambiente con la variabile, ad esempio: TZ = America / Bogota
E test nel tuo progetto:
new Date()
Spero che tu possa aiutarti
È possibile applicare il fuso orario del processo Node.js impostando la variabile di ambiente TZ
suUTC
Quindi tutto il tempo sarà misurato in UTC + 00: 00
Elenco completo: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Esempio package.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
basta impostare la variabile di ambiente nel file principale come index.js o app.js o main.js o qualunque sia il nome del file:
process.env.TZ = "Aisa/Tehran";
questo imposterà il fuso orario che verrà utilizzato nell'intera applicazione del nodo