2016-08-12 15 views
6

Czy istnieje sposób na uzyskanie lokalnej strefy czasowej z systemu (np .: - ubuntu) przy użyciu nodejs?Jak uzyskać lokalną strefę czasową z systemu używając nodejs

Wykorzystałem plik moment.js do wyodrębnienia wartości daty i godziny. Ale nie mógł znaleźć sposobu na wyodrębnienie strefy czasowej.

+4

spróbuj tego 'new Date(). GetTimezoneOffset()'. – vkstack

+0

Dzięki. Zadziałało. Ale potrzebowałem go sformatowanego w "gg: mm"; więc użyłem pliku moment.js z 'console.log (''. concat (offset <0?" - ":" + ", moment ('. concat (Math.abs (offset/60), Math.abs (offset % 60) <10? "0": "", Math.abs (przesunięcie% 60)), "hmm"). Format ("HH: mm")); ' – Malith

Odpowiedz

-2

I rozwiązać to za pomocą 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"))); 

------ Zmieniano --------

mogę znaleźć lepsze rozwiązanie używając moment.js. Wystarczy użyć moment().format('Z')

co daje wynik:

+05: 30

+1

możesz również użyć formatu' moment(). ('Z') ', aby uzyskać ten sam wynik: –

+0

Dziękujemy!: D To sprawia, że ​​kod jest bardzo kompaktowy – Malith

+2

To daje aktualne przesunięcie w twojej aktualnej strefie czasowej, ale to może się różnić w części roku z powodu zmian czasu letniego .W razie wątpliwości zawsze używaj/przechowuj datę/czas UTC plus identyfikator strefy czasowej, a następnie konwertuj do lokalnego tak późno, jak to możliwe. W ten sposób możesz obsługiwać przekraczanie zmian czasu letniego. Zobacz moją odpowiedź, aby uzyskać więcej informacji. – Tim

3

To bardzo proste.

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

I nie ma nic innego, czy można sprawdzić, czy momentJS może pomóc, czy nie.

+0

ten jest ładny, ale jeśli offset jest ujemny, dostaniesz - 4: 0, dobrym pomysłem jest dodanie funkcji wypełnienia. –

6

Istniejące odpowiedzi pokażą aktualne przesunięcie strefy czasowej, ale będziesz mieć problemy, jeśli porównasz historyczne/przyszłe punkty w czasie, ponieważ nie będzie to uwzględniało zmian czasu letniego.

W wielu strefach czasowych przesunięcie zmienia się w ciągu roku i zmiany te występują w różnych terminach lub w ogóle nie zależą od szerokości geograficznej. Jeśli masz tylko czas UTC i przesunięcie, nigdy nie możesz być pewny, jakie przesunięcie będzie miało miejsce w tej lokalizacji w różnych innych porach roku.

Na przykład przesunięcie UTC + 2: 00 może odnosić się do Barcelony latem lub Wybrzeża Kości Słoniowej przez cały rok. Przesunięcie 2-godzinne będzie zawsze wyświetlało prawidłowy czas na Wybrzeżu Kości Słoniowej, ale przez pół roku w Barcelonie będzie trwało pół godziny.

W jaki sposób zajmujemy się wszystkimi tymi problemami ze strefami czasowymi? Cóż, to jest całkiem prosta:

  1. zapisać wszystkie czasy w UTC
  2. zapisać nazwę strefy czasowej, gdzie to nastąpiło

W JavaScript można użyć Moment strefę czasową guess the users timezone chociaż mam tylko przetestowane w przeglądarce:

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

następnie można użyć ten ciąg czasowej w Moment Timezone pomóc zrównoważyć przechwyconych razy UTC.

+0

To jest poprawna odpowiedź. Przesunięcia i strefy czasowe są powiązane, ale różne i mogą powodować spustoszenie, jeśli twój kod wymaga uwzględnienia oszczędności w świetle dziennym. – Brideau

Powiązane problemy