Comment définir le fuseau horaire par défaut dans node.js?
Comment définir le fuseau horaire par défaut dans node.js?
Réponses:
Selon ce fil de discussion du groupe Google , vous pouvez définir la variable d'environnement TZ avant d'appeler des fonctions de date. Je viens de le tester et cela fonctionne.
> 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)'
Cependant, vous ne pouvez pas changer le fuseau horaire plus tard, car à ce moment-là, Node a déjà lu la variable d'environnement.
process.env.TZ = 'Europe/Amsterdam'
"bien, maintenant où puis-je trouver une liste de toutes les valeurs valides que je peux définir?" et je ne le trouve pas, à chaque fois.
zone.tab
fichier dans cette archive.
Une autre approche qui semblait fonctionner pour moi au moins dans un environnement Linux consiste à exécuter votre application Node.js comme ceci:
env TZ='Europe/Amsterdam' node server.js
Cela devrait au moins garantir que le fuseau horaire est correctement défini dès le début.
Voici un exemple fonctionnel à 100% pour obtenir un fuseau horaire personnalisé Date et heure dans NodeJs sans utiliser de modules externes:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
Malheureusement, le réglage process.env.TZ
ne fonctionne pas très bien - en gros, il est indéterminé quand le changement sera effectif).
Donc, définir le fuseau horaire du système avant de démarrer le nœud est votre seule option appropriée.
Cependant, si vous ne pouvez pas faire cela, il devrait être possible d'utiliser l' heure des nœuds comme solution de contournement: obtenez vos heures en heure locale ou UTC et convertissez-les dans le fuseau horaire souhaité. Consultez Comment utiliser le décalage du fuseau horaire dans Nodejs? pour plus de détails.
La solution env TZ='Europe/Amsterdam' node server.js
de @uhef fonctionne dans les cas où votre application ne fonctionne pas avec un processus forké, mais lorsque vous travaillez avec un processus forké, en particulier lorsque vous lancez votre application avec un outil de construction comme gulp , la commande gulp
prendra les valeurs env, mais le processus créé par gulp not (votre application).
Pour résoudre ce problème, vous devez faire:
$ export TZ="Europe/Amsterdam"; gulp myTask
Cela définira la TZ
variable d'environnement pour tous les processus démarrés dans la console sur laquelle vous travaillez, y compris tous les processus ultérieurs exécutés après la commande gulp dans la même console sans qu'il soit nécessaire de les exécuter à nouveau avec le préfixe export TZ="Europe/Amsterdam";
.
Etc/UTC
Il existe également des décalages spécifiques disponibles dans Etc
, mais le décalage est inverse de ce à quoi on pourrait s'attendre. Etc/GMT-1
est UTC + 1 heure. Voirhttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Définissez le fuseau horaire du serveur et utilisez la synchronisation NTP. Voici une meilleure solution pour changer l'heure du serveur.
Pour lister les fuseaux horaires
timedatectl list-timezones
Pour définir le fuseau horaire
sudo timedatectl set-timezone America/New_York
Vérifier le fuseau horaire
timedatectl
Je préfère utiliser le fuseau horaire UTC pour mes serveurs et bases de données. Toutes les conversions doivent être gérées sur le client. Nous pouvons utiliser moment.js côté client.
Il sera également facile de maintenir de nombreuses instances,
Je sais que ce fil est très ancien, mais je pense que cela aiderait tous ceux qui ont atterri ici depuis Google comme moi.
Dans GAE Flex (NodeJs), vous pouvez définir la variable d'environnement TZ (celle qui gère tous les fuseaux horaires de date dans l'application) dans le fichier app.yaml, je vous laisse ici un exemple:
app.yaml
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
Voici une réponse pour ceux qui déploient une application Node.js sur Amazon AWS Elastic Beanstalk . Je n'ai vu cela documenté nulle part ailleurs:
Sous Configuration -> Software -> Environment Properties
, définissez simplement la paire valeur / clé TZ
et votre fuseau horaire, par exemple America/Los Angeles
, et appliquez la modification.
Vous pouvez vérifier l'effet en sortant new Date().toString()
dans votre application Node et en faisant attention au suffixe de fuseau horaire.
À partir du nœud 13 , vous pouvez maintenant définir à plusieurs reprises process.env.TZ
et il sera reflété dans le fuseau horaire des nouveaux objets Date. Je ne sais pas si j'utiliserais cela dans le code de production, mais cela serait certainement utile dans les tests unitaires.
> 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
Vous pouvez prendre le fuseau horaire du moment . Il vous permet de définir votre emplacement et prend également en charge l'heure d'été.
Date
ou d'autres modules intégrés.
Parfois, vous pouvez exécuter du code sur un serveur virtuel ailleurs - Cela peut devenir trouble lors de l'exécution de NODEJS ou d'autres versions.
Voici un correctif qui vous permettra d'utiliser facilement n'importe quel fuseau horaire.
Vérifiez ici la liste des fuseaux horaires
Mettez simplement votre phrase de fuseau horaire entre crochets de votre ligne FORMAT.
Dans ce cas, je convertis EPOCH en 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');
je travaille avec ce paquet npm unix-system-timezone
Mise à jour pour node.js v13
Comme @Tom l'a souligné, la prise en charge complète d'icu est désormais intégrée à la v13. Ainsi, les étapes de configuration peuvent être omises. Vous pouvez toujours personnaliser la façon dont vous souhaitez créer ou utiliser icu au runtime: https://nodejs.org/api/intl.html
Pour node.js sous Windows , vous pouvez effectuer les opérations suivantes:
Installez full-icu s'il a été installé, qui applique correctement les paramètres régionaux de date
npm i full-icu
ou globalement: npm i -g full-icu
Utilisez toLocaleString () dans votre code, par exemple:
new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })
Cela produira quelque chose comme: 25/02/2019, 3:19:22 pm
. Si vous préférez 24 heures, 'en-GB' produira:25/02/2019, 15:19:22
Pour node.js en tant qu'application Web Azure , en plus des paramètres d'application de WEBSITE_TIME_ZONE, vous devez également définir NODE_ICU_DATA sur, par exemple <your project>\node_modules\full-icu
, après avoir effectué le npm i full-icu. L'installation globale du package sur Azure n'est pas suggérée car ce répertoire est temporaire et peut être effacé.
Réf: 1. NodeJS n'applique pas correctement les paramètres régionaux de date
Vous pouvez configurer le fuseau horaire global avec la bibliothèque tzdata:
npm install tzdata -y
Après avoir défini votre environnement avec la variable par exemple: TZ = America / Bogota
Et des tests dans votre projet:
new Date()
J'espère vous aider
Vous pouvez appliquer le fuseau horaire du processus Node.js en définissant la variable d'environnement TZ
surUTC
Donc, tout le temps sera mesuré en UTC + 00: 00
Liste complète: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Exemple package.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
il suffit de définir une variable d'environnement dans votre fichier principal comme index.js ou app.js ou main.js ou quel que soit le nom de votre fichier:
process.env.TZ = "Aisa/Tehran";
cela définira le fuseau horaire qui sera utilisé dans l'ensemble de votre application de nœud