Wie lege ich die Standardzeitzone in node.js fest?
Wie lege ich die Standardzeitzone in node.js fest?
Antworten:
Gemäß diesem Google-Gruppenthread können Sie die TZ-Umgebungsvariable festlegen, bevor Sie Datumsfunktionen aufrufen. Einfach getestet und es funktioniert.
> 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)'
Sie können die Zeitzone jedoch später nicht mehr ändern, da Node die Umgebungsvariable bereits gelesen hat.
process.env.TZ = 'Europe/Amsterdam'
denke ich jedes Mal, wenn ich so etwas wie "schön, wo finde ich jetzt eine Liste aller gültigen Werte, die ich einstellen kann?" und ich finde es nicht jedes Mal.
zone.tab
Datei in diesem Archiv.
Ein anderer Ansatz, der zumindest in einer Linux-Umgebung für mich zu funktionieren schien, besteht darin, Ihre Node.js-Anwendung wie folgt auszuführen:
env TZ='Europe/Amsterdam' node server.js
Dies sollte zumindest sicherstellen, dass die Zeitzone bereits von Anfang an richtig eingestellt ist.
Hier ist ein 100% funktionierendes Beispiel für das Abrufen einer benutzerdefinierten Zeitzone Datum Uhrzeit in NodeJs ohne Verwendung externer Module:
const nDate = new Date().toLocaleString('en-US', {
timeZone: 'Asia/Calcutta'
});
console.log(nDate);
Leider funktioniert die Einstellung process.env.TZ
nicht wirklich gut - im Grunde ist es unbestimmt, wann die Änderung wirksam wird.
Das Einstellen der Zeitzone des Systems vor dem Starten des Knotens ist daher Ihre einzig richtige Option.
Wenn Sie dies jedoch nicht tun können, sollte es möglich sein, die Knotenzeit als Problemumgehung zu verwenden: Ermitteln Sie Ihre Zeiten in lokaler oder UTC-Zeit und konvertieren Sie sie in die gewünschte Zeitzone. Siehe Verwenden des Zeitzonenversatzes in Nodejs. für Details.
Die Lösung env TZ='Europe/Amsterdam' node server.js
von @uhef funktioniert in Fällen, in denen Ihre App nicht mit einem Forked-Prozess funktioniert. Wenn Sie jedoch mit einem Forked-Prozess arbeiten, insbesondere wenn Sie Ihre App mit einem Build- Tool wie gulp starten , gulp
übernimmt der Befehl die env-Werte der prozess von gulp nicht erstellt (deine app).
Um dies zu lösen, müssen Sie Folgendes tun:
$ export TZ="Europe/Amsterdam"; gulp myTask
Dadurch wird die TZ
Umgebungsvariable für alle Prozesse festgelegt, die in der Konsole gestartet werden, an der Sie arbeiten. Dazu gehören alle nach dem Befehl gulp ausgeführten Teilprozesse in derselben Konsole, ohne dass sie erneut mit dem Präfix ausgeführt export TZ="Europe/Amsterdam";
werden müssen.
Etc/UTC
Es gibt auch bestimmte Offsets in Etc
, aber der Offset ist umgekehrt zu dem, was man erwarten würde. Etc/GMT-1
ist UTC + 1 Stunde. Siehehttps://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Stellen Sie die Server-Zeitzone ein und verwenden Sie die NTP-Synchronisierung. Hier ist eine bessere Lösung, um die Serverzeit zu ändern.
Zeitzonen auflisten
timedatectl list-timezones
Zeitzone einstellen
sudo timedatectl set-timezone America/New_York
Überprüfen Sie die Zeitzone
timedatectl
Ich bevorzuge die Verwendung der UTC-Zeitzone für meine Server und Datenbanken. Alle Konvertierungen müssen auf dem Client durchgeführt werden. Wir können moment.js auf Client-Seite nutzen.
Es wird auch einfach sein, viele Instanzen zu pflegen.
Ich weiß, dass dieser Thread sehr alt ist, aber ich denke, das würde jedem helfen, der hier von Google gelandet ist, wie ich.
In GAE Flex (NodeJs) können Sie die Umgebungsvariable TZ (die alle Datums- und Zeitzonen in der App verwaltet) in der Datei app.yaml festlegen. Ich lasse Ihnen hier ein Beispiel:
app.yaml
# [START env]
env_variables:
# Timezone
TZ: America/Argentina/Buenos_Aires
Hier ist eine Antwort für diejenigen, die eine Node.js-Anwendung für Amazon AWS Elastic Beanstalk bereitstellen . Ich habe das nirgendwo anders dokumentiert gesehen:
Stellen Sie Configuration -> Software -> Environment Properties
unter einfach das Schlüsselwertpaar TZ
und Ihre Zeitzone ein, z. B. America/Los Angeles
, und übernehmen Sie die Änderung.
Sie können den Effekt überprüfen, indem Sie new Date().toString()
in Ihrer Node-App ausgeben und auf das Zeitzonensuffix achten.
Ab Knoten 13 können Sie jetzt wiederholt festlegen process.env.TZ
, dass dies in der Zeitzone neuer Datumsobjekte angezeigt wird. Ich weiß nicht, ob ich dies im Produktionscode verwenden würde, aber es wäre definitiv nützlich bei Unit-Tests.
> 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
Sie können Moment Zeitzone nehmen . Sie können Ihren Standort festlegen und sich um die Sommerzeit kümmern.
Date
oder andere eingebaute Module möglich.
Manchmal führen Sie Code auf einem virtuellen Server an einer anderen Stelle aus. Dies kann beim Ausführen von NODEJS oder anderen Varianten schlammig werden.
Hier ist ein Fix, mit dem Sie jede Zeitzone einfach verwenden können.
Hier finden Sie eine Liste der Zeitzonen
Setzen Sie einfach Ihre Zeitzonenphrase in die Klammern Ihrer FORMAT-Zeile.
In diesem Fall konvertiere ich EPOCH zu 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');
Ich arbeite mit diesem npm Paket Unix-System-Zeitzone
Update für node.js v13
Wie @Tom hervorhob, ist in Version 13 jetzt die vollständige ICU-Unterstützung integriert. So können die Einrichtungsschritte weggelassen werden. Sie können weiterhin anpassen, wie Sie icu zur Laufzeit erstellen oder verwenden möchten: https://nodejs.org/api/intl.html
Für node.js unter Windows können Sie Folgendes tun:
Installieren Sie full-icu, wenn es installiert wurde, wodurch Datumsschemas ordnungsgemäß angewendet werden
npm i full-icu
oder global: npm i -g full-icu
Verwenden Sie toLocaleString () in Ihrem Code, z.
new Date().toLocaleString('en-AU', { timeZone: 'Australia/Melbourne' })
Dies erzeugt so etwas wie : 25/02/2019, 3:19:22 pm
. Wenn Sie 24 Stunden bevorzugen, produziert 'en-GB':25/02/2019, 15:19:22
Für node.js als Azure-Webanwendung müssen Sie zusätzlich zu den Anwendungseinstellungen von WEBSITE_TIME_ZONE auch NODE_ICU_DATA auf z. B. setzen, z. B. <your project>\node_modules\full-icu
nachdem Sie die npm i full-icu ausgeführt haben. Die globale Installation des Pakets in Azure wird nicht empfohlen, da dieses Verzeichnis nur vorübergehend ist und gelöscht werden kann.
Ref: 1. NodeJS wendet Datumsschemas nicht richtig an
Sie können die globale Zeitzone mit der Bibliothek tzdata konfigurieren:
npm install tzdata -y
Nachdem Sie Ihre Umgebung mit der Variablen festgelegt haben, zum Beispiel: TZ = America / Bogota
Und testen in Ihrem Projekt:
new Date()
Ich hoffe dir zu helfen
Sie können die Prozesszeitzone von Node.js erzwingen, indem Sie die Umgebungsvariable TZ
auf setzenUTC
Die gesamte Zeit wird also in UTC + 00: 00 gemessen
Vollständige Liste: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Beispiel package.json:
{
"scripts": {
"start": "TZ='UTC' node index.js"
}
}
Legen Sie einfach die Umgebungsvariable in Ihrer Hauptdatei wie index.js oder app.js oder main.js fest oder wie auch immer Ihr Dateiname lautet:
process.env.TZ = "Aisa/Tehran";
Dadurch wird die Zeitzone festgelegt, die in Ihrer gesamten Knotenanwendung verwendet wird