2016-08-12 2 views
6

Gibt es eine Möglichkeit, die lokale Zeitzone vom System (zB: - ubuntu) mit nodejs zu erhalten?Wie erhalte ich die lokale Zeitzone vom System mit nodejs

Ich habe moment.js verwendet, um die Datums- und Uhrzeitwerte zu extrahieren. Es konnte aber auch keine Möglichkeit gefunden werden, die Zeitzone zu extrahieren.

+4

versuchen Sie diese 'neue Date(). GetTimezoneOffset()'. – vkstack

+0

Danke. Es funktionierte. Aber ich brauchte es formatiert in "hh: mm"; also habe ich moment.js mit 'console.log (''. concat (offset <0?" - ":" + ", moment (''. concat (Math.abs (offset/60), Math.abs (offset % 60) <10? "0": "", Math.abs (offset% 60)), "hmm"). Format ("HH: mm")); ' – Malith

Antwort

-2

Ich löste dies mit moment.js (http://momentjs.com/docs/)

var moment = require('moment'); 
var offset = moment().utcOffset(); 
console.log(''.concat(offset < 0 ? "-" : "+",moment(''.concat(Math.abs(offset/60),Math.abs(offset%60) < 10 ? "0" : "",Math.abs(offset%60)),"hmm").format("HH:mm"))); 

------ -------- Edited

ich eine bessere Lösung mit moment.js gefunden. Verwenden Sie einfach moment().format('Z')

, die den Ausgang gibt:

+05: 30

+1

Sie können auch' moment(). Format verwenden (Z) um das gleiche Ergebnis zu erhalten –

+0

Danke !!: D Dies macht den Code sehr kompakt – Malith

+2

Dies gibt Ihnen den aktuellen Offset in Ihrer aktuellen Zeitzone, aber dieser kann aufgrund von DST-Änderungen für einen Teil des Jahres variieren .Verwenden Sie im Zweifelsfall immer UTC-Datum/Uhrzeit und den Zeitzonen-Identifikator und speichern Sie ihn dann so spät wie möglich in den lokalen Bereich um. Auf diese Weise können Sie Änderungen der Sommerzeit bewältigen. Siehe meine Antwort für weitere Details. – Tim

3

Es ist sehr einfach.

var x = new Date(); 
var offset= -x.getTimezoneOffset(); 
console.log((offset>=0?"+":"-")+parseInt(offset/60)+":"+offset%60) 

Und es gibt nichts anderes, oder Sie können sehen, ob momentJS können Sie oder nicht helfen.

+0

dieser ist nett, aber wenn Offset negativ ist, erhalten Sie - 4: 0, es ist auch eine gute Idee, eine Füllfunktion hinzuzufügen –

6

Die vorhandenen Antworten geben Ihnen den aktuellen Zeitzonen-Offset an, aber Sie werden Probleme haben, wenn Sie historische/zukünftige Zeitpunkte vergleichen, da dies nicht für Sommerzeitänderungen sorgt.

In vielen Zeitzonen variiert der Offset im Laufe des Jahres und diese Änderungen treten zu unterschiedlichen Zeitpunkten oder gar nicht auf, je nach Breitengrad. Wenn Sie nur UTC-Zeit und einen Offset haben, können Sie nie sicher sein, wie der Offset zu verschiedenen anderen Zeiten im Jahr an diesem Ort sein wird.

Zum Beispiel könnte sich ein UTC + 2: 00 Offset auf das ganze Jahr über in Barcelona oder im Sommer in der Elfenbeinküste beziehen. Der 2-Stunden-Versatz zeigt immer die korrekte Zeit in der Elfenbeinküste an, wird aber in Barcelona für ein halbes Jahr 1 Stunde lang sein.

Wie können wir alle diese Zeitzonenprobleme behandeln? Nun, es ist ziemlich einfach:

  1. markieren Alle Zeiten in UTC
  2. Speichern Sie die Zeitzone Name wo diese

In JavaScript aufgetreten ist, können Sie Moment Zeitzone zu guess the users timezone verwenden, obwohl ich nur getestet habe dies im Browser:

moment.tz.guess(); // eg. 'America/Chicago' 

anschließend können Sie diese Zeitzone Zeichenfolge in Moment Timezone verwenden, um Ihre aufgenommenen UTC Zeiten zu helfen ausgeglichen.

+0

Dies ist die richtige Antwort. Offsets und Zeitzonen sind miteinander verwandt, aber unterschiedlich und können Unheil anrichten, wenn Ihr Code, wie erwähnt, Tageslichteinsparungen erfordert. – Brideau

Verwandte Themen