Szukam funkcji do konwersji daty w jednej strefie czasowej na inną.
Potrzebuje dwóch parametrów,
- data (w formacie „2012/04/10 10:10:30 +0000”)
- ciąg strefy czasowej („Asia / Jakarta”)
Ciąg strefy czasowej opisano w http://en.wikipedia.org/wiki/Zone.tab
Czy jest na to łatwy sposób?
javascript
timezone
Rizky Ramadhan
źródło
źródło
Odpowiedzi:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
źródło
toLocaleString
, ale potem bardzo niepoprawnie pokazuje przekazywanie tego łańcucha z powrotem doDate
konstruktora. To prosi o kłopoty. Parser ciągów daty nie jest wymagany do akceptowania formatów specyficznych dla ustawień regionalnych, a dane wejściowe byłyby traktowane tak, jakby były w lokalnej strefie czasowej. Nie rób tego Wystarczy użyć ciągu wyjściowego z pierwszegotoLocalString
wywołania.Dla użytkowników moment.js możesz teraz użyć strefy czasowej . Używając go, twoja funkcja wyglądałaby mniej więcej tak:
źródło
Date.prototype.toLocaleString
.Skradzione bezwstydnie z: http://www.techrepublic.com/article/convert-the-local-time-to-another-time-zone-with-this-javascript/6016329
ta funkcja jest przydatna do obliczania wartości strefy czasowej poprzez podanie nazwy miasta / kraju i wartości przesunięcia
źródło
Większość przeglądarek stacjonarnych (nie mobilnych) oprócz Safari obsługuje funkcję toLocaleString z argumentami, starsze przeglądarki zwykle ignorują argumenty.
źródło
toLocaleStringSupportsLocales()
implementację, która pozwala niezawodnie sprawdzać wsparcie.OK, znalazłem to!
Używam timezone-js . to jest kod:
źródło
Jeśli nie chcesz importować dużej biblioteki, możesz po prostu użyć Intl.DateTimeFormat do konwersji obiektów Date na różne strefy czasowe.
Zadbamy o to, o offsety, czas letni i zmiany w przeszłości.
źródło
toLocaleString
ma niespójną implementację i działa od wersji IE11.formatter
obiektu otrzymujesz: `` Wartość opcji 'Azja / Dżakarta' dla 'timeZone' jest poza prawidłowym zakresem. Oczekiwany: ['UTC'] ``Rozumiem !
Chciał wymusić wyświetloną datę = data serwera, bez względu na ustawienia lokalne (UTC).
Mój serwer to GMT-6 -> nowa data (). GetTimezoneOffset () = 360.
źródło
Do ustawienia strefy czasowej można użyć metody toLocaleString ().
W przypadku Indii można użyć opcji „Indian / Christmas”, a następujące strefy czasowe to:
źródło
toLocaleString
Roztwór już podane 4 lata temu .Jeśli wystarczy do stref czasowych nawróconych mam uploaded wersję okrojoną z chwila strefy czasowej tylko z minimum funkcjonalność. Jego dane ~ 1 KB +:
źródło
Ustaw zmienną z rokiem, miesiącem i dniem oddzielonymi symbolami „-”, plus „T” i czas we wzorcu GG: mm: ss, a następnie +01: 00 na końcu ciągu (w moim przypadku strefa czasowa to +1). Następnie użyj tego ciągu jako argumentu konstruktora daty.
źródło
Powinienem zauważyć, że jestem ograniczony w zakresie bibliotek zewnętrznych, z których mogę korzystać. moment.js i timezone-js NIE były dla mnie opcją.
Obiekt daty js, który mam, znajduje się w UTC. Musiałem uzyskać datę ORAZ czas od tej daty w określonej strefie czasowej (w moim przypadku „Ameryka / Chicago”).
UTC jest obecnie 6 godzin przed „America / Chicago”. Dane wyjściowe to:
źródło
new Date();
zwraca lokalną strefę czasową, a nie UTCIf no arguments are provided, the constructor creates a JavaScript Date object for the current date and time according to system settings.
Oto mój kod, działa idealnie, możesz wypróbować podając poniżej demo:
źródło
currentDateTimeCentralTimeZone.getHours()
? Bez tego działałoby i jest takie samo, jak szukanie odpowiedzi stackoverflow.com/a/40809160/1404185Możesz spróbować również w celu konwersji strefy czasowej daty na Indie:
źródło
Po rozejrzeniu się, w tym linkach z tej strony, znalazłem ten świetny artykuł, korzystając ze strefy czasowej moment:
https://www.webniraj.com/2016/11/23/javascript-using-moment-js-to-display-dates-times-in-users-timezone/
Podsumowując:
Uzyskaj strefę czasową użytkownika
Zwraca np .: Strefa czasowa: Europa / Londyn
Ustaw domyślną strefę czasową użytkownika
Ustaw niestandardową strefę czasową
Konwertuj datę / godzinę na lokalną strefę czasową, przy założeniu, że pierwotna data / godzina jest w UTC
Zwroty: niedziela, 25 grudnia 2016 r., 7:00
Konwertuj datę / godzinę na czas LA
Zwroty: sob., 24 grudnia 2016 r., Godz. 23:00
Przelicz z czasu LA na Londyn
Zwroty: niedziela, 25 grudnia 2016 r., Godz. 15.00
źródło
Możesz także użyć https://www.npmjs.com/package/ctoc_timezone
Ma bardzo prostą implementację i dostosowanie formatu.
Zmiana formatu w toTimeZone:
CtoC.toTimeZone(new Date(),"EST","Do MMM YYYY hh:mm:ss #{EST}");
Wynik :
28th Feb 2013 19:00:00 EST
W dokumencie możesz zapoznać się z wieloma funkcjami.
źródło
istnieje moduł npm o nazwie „timezones.json”, którego można użyć do tego; składa się w zasadzie z pliku json z obiektami zawierającymi informacje na temat czasu letniego i przesunięcia, ....
dla Azji / Dżakarty byłby w stanie zwrócić ten obiekt:
możesz go znaleźć tutaj:
https://github.com/dmfilipenko/timezones.json
https://www.npmjs.com/package/timezones.json
mam nadzieję, że się przyda
źródło
Ludzie zaznajomieni z
java.time
pakietem java 8 lubjoda-time
prawdopodobnie pokochają nowego dzieciaka na bloku: js-joda bibliotekę .zainstalować
Przykład
W prawdziwej javowej naturze jest to dość pełne lol. Ale ponieważ jest to przeniesiona biblioteka Java, szczególnie biorąc pod uwagę, że przeniesiono 1800'ish przypadków testowych, prawdopodobnie również działa ona doskonale dokładnie.
Manipulacja chrono jest trudna. Dlatego w wielu innych bibliotekach występują błędy. Moment.js wydaje się mieć odpowiednie strefy czasowe, ale inne biblioteki js, które widziałem, w tym
timezone-js
, nie wydają się godne zaufania.źródło
Niedawno zrobiłem to w maszynce:
Używam formatu „en-UK”, ponieważ jest on prosty. Może to być „en-US” lub cokolwiek działa.
Jeśli pierwszym argumentem jest lokalna strefa czasowa, a seconde jest docelową strefą czasową, zwraca obiekt Date z prawidłowym przesunięciem.
źródło
Miałem problem z użyciem Strefy Moment . Dodaję tę odpowiedź, jeśli ktoś ma ten sam problem. Więc mam ciąg daty
2018-06-14 13:51:00
pochodzący z mojegoAPI
. Wiem, że to jest przechowywaneUTC
ale ciąg nie mówi sam za siebie.Informuję strefę czasową moment, z której strefy czasowej pochodzi ta data, wykonując:
Teraz chciałbym przekonwertować go na określoną strefę czasową, wykonując:
źródło
Wystarczy ustawić strefę czasową kraju, w którym chcesz, i możesz z łatwością wyświetlić w html aktualizację za pomocą funkcji SetInteval () po każdej minucie. funkcja formatAMPM () zarządza formatem 12-godzinnym i wyświetlaniem czasu AM / PM.
źródło
Nie znam prostej metody konwertowania obiektu daty na dowolną strefę czasową, ale jeśli chcesz przekonwertować go na lokalną strefę czasową, możesz po prostu przekonwertować go
Date.prototype.getTime()
na odpowiednią liczbę milisekund i ponownie.Na przykład,
date.getHours()
będzie teraz powrócić15
zamiast13
jeśli, tak jak ja, w Austrii (i to lato).Czytałem, że różne funkcje daty i godziny mogą wykazywać niestandardowe zachowanie w niektórych przeglądarkach, więc przetestuj to najpierw. Mogę potwierdzić, że działa w Chrome.
źródło
Przesunięcie strefy czasowej dla bieżącej strefy czasowej
Dla mojej strefy czasowej GMT + 10 (Australia) zwrócił -36000
źródło
szybki i brudny ręczny zmieniacz godzin i powrót:
źródło