Wiem, jak uzyskać przesunięcie strefy czasowej, ale potrzebuję możliwości wykrycia czegoś takiego jak „Ameryka / Nowy Jork”. Czy jest to w ogóle możliwe z poziomu JavaScript, czy jest to coś, co będę musiał gościć w oparciu o przesunięcie?
javascript
timezone
Mike Thomsen
źródło
źródło
Odpowiedzi:
W Internacjonalizacja API obsługuje coraz strefę czasową użytkownika i jest obsługiwany we wszystkich obecnych przeglądarkach.
Należy pamiętać, że w niektórych starszych wersjach przeglądarek, które obsługują interfejs API internacjonalizacji,
timeZone
właściwość jest ustawiona na,undefined
a nie na ciąg strefy czasowej użytkownika. O ile wiem, w chwili pisania tego tekstu (lipiec 2017 r.) Wszystkie obecne przeglądarki z wyjątkiem IE11 będą zwracać strefę czasową użytkownika jako ciąg.źródło
Większość pozytywnych odpowiedzi jest prawdopodobnie najlepszym sposobem na uzyskanie strefy czasowej, jednak
Intl.DateTimeFormat().resolvedOptions().timeZone
zwraca nazwę strefy czasowej IANA z definicji, która jest w języku angielskim.Jeśli chcesz, aby nazwa strefy czasowej była w języku bieżącego użytkownika, możesz ją przeanalizować z
Date
reprezentacji ciągu w następujący sposób:Przetestowano w Chrome i Firefox.
Oczywiście to nie zadziała zgodnie z przeznaczeniem w niektórych środowiskach. Na przykład node.js zwraca przesunięcie GMT (np.
GMT+07:00
) Zamiast nazwy. Ale myślę, że jest nadal czytelny jako rozwiązanie awaryjne.PS nie będzie działać w IE11, tak samo jak
Intl...
rozwiązanie.źródło
Możesz użyć tego skryptu. http://pellepim.bitbucket.org/jstz/
Repozytorium forkuj lub klonuj tutaj. https://bitbucket.org/pellepim/jstimezonedetect
Po dołączeniu skryptu możesz uzyskać listę stref czasowych w -
jstz.olson.timezones
zmiennej.Poniższy kod służy do określenia strefy czasowej przeglądarki klienta.
Ciesz się jstz!
źródło
Pobierz strefę czasową według nazwy (np. „Ameryka / Nowy Jork”)
źródło
Intl.DateTimeFormat().resolvedOptions().timeZone
Intl.DateTimeFormat().resolvedOptions().timeZone
zwracaundefined
, alemoment.tz.guess()
zwraca poprawną wartośćMożesz po prostu napisać własny kod, korzystając z tabeli mapowania tutaj: http://www.timeanddate.com/time/zones/
lub użyj biblioteki momentów i stref czasowych: http://momentjs.com/timezone/docs/
Widzieć
zone.name; // America/Los_Angeles
lub ta biblioteka: https://github.com/Canop/tzdetect.js
źródło
To pobiera kod strefy czasowej (np.
GMT
) W starszym javascript (używam skryptu aplikacji Google ze starym silnikiem):Umieszczam to tutaj na wypadek, gdyby ktoś tego potrzebował.
źródło
UTC
/GMT
. Wygląda na to, że inne są przeliterowane; npPacific Daylight Time
.Wypróbuj ten kod, odwołaj się stąd
źródło
W javascript metoda Date.getTimezoneOffset () zwraca przesunięcie strefy czasowej z czasu UTC w minutach dla bieżących ustawień regionalnych.
Przydatnym narzędziem będzie Moment'timezone. http://momentjs.com/timezone/
Konwertuj daty między strefami czasowymi
źródło