Chcę, aby serwer zawsze podawał daty w formacie UTC w kodzie HTML i aby JavaScript w witrynie klienta był konwertowany na lokalną strefę czasową użytkownika.
Dodatkowa korzyść, jeśli mogę wyświetlać dane w formacie daty użytkownika.
Chcę, aby serwer zawsze podawał daty w formacie UTC w kodzie HTML i aby JavaScript w witrynie klienta był konwertowany na lokalną strefę czasową użytkownika.
Dodatkowa korzyść, jeśli mogę wyświetlać dane w formacie daty użytkownika.
Wydaje się, że najbardziej niezawodnym sposobem rozpoczęcia od daty UTC jest utworzenie nowego Date
obiektu i użycie setUTC…
metod w celu ustawienia żądanej daty / godziny.
Następnie różne toLocale…String
metody zapewnią zlokalizowane dane wyjściowe.
// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);
console.log(d); // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString()); // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString()); // -> 02/28/2004
console.log(d.toLocaleTimeString()); // -> 23:45:26
toLocateDateString()
zwraca coś, co wygląda jak „Niedziela, 12 stycznia 2014 r.” ..var d = new Date(Date.UTC(2004,1,29,2,45,26));
toLocaleString()
funkcjach.W przypadku nowych projektów po prostu użyj momentu.js.
To pytanie jest dość stare, więc moment.js w tamtym czasie nie istniał, ale w przypadku nowych projektów bardzo upraszcza takie zadania.
Najlepiej przeanalizować ciąg daty z UTC w następujący sposób (utwórz na serwerze ciąg zgodny z ISO-8601, aby uzyskać spójne wyniki we wszystkich przeglądarkach):
Teraz po prostu użyj
m
w swojej aplikacji, moment.js domyślnie ustawia lokalną strefę czasową dla operacji wyświetlania. Istnieje wiele sposobów formatowania wartości daty i godziny lub wyodrębniania ich części.Możesz nawet sformatować obiekt momentu w lokalizacji użytkownika w następujący sposób:
Aby przekształcić obiekt moment.js w inną strefę czasową (tj. Ani lokalną, ani UTC), będziesz potrzebować rozszerzenia strefy czasowej moment.js . Ta strona zawiera również kilka przykładów, jest dość prosta w użyciu.
źródło
For old projects, just use jQuery
Możesz użyć
new Date().getTimezoneOffset()/60
dla strefy czasowej. Istnieje równieżtoLocaleString()
metoda wyświetlania daty przy użyciu ustawień regionalnych użytkownika.Oto cała lista: Praca z datami
źródło
toLocaleString
?Gdy masz już skonstruowany obiekt daty, oto fragment kodu konwersji:
Funkcja przyjmuje obiekt Date w formacie UTC i ciąg formatu.
Będziesz potrzebował
Date.strftime
prototypu.źródło
getTimezoneOffset()/60
może zwrócić ułamek (np. Przesunięcie Indii o +05: 30 zwróci 5,5). Liczby dziesiętne są obcinane. W przeciwnym razie ustawienie godzin spowoduje zaktualizowanie innych wartości (ustaw godziny na 48 i zobacz, co się stanie).W JS nie ma prostych i wieloplatformowych sposobów formatowania lokalnej daty i godziny, poza konwersją każdej właściwości, jak wspomniano powyżej.
Oto szybki hack, którego używam, aby uzyskać lokalny RRRR-MM-DD. Zauważ, że to hack, ponieważ ostateczna data nie będzie już miała poprawnej strefy czasowej (więc musisz zignorować strefę czasową). Jeśli potrzebuję czegoś więcej, używam momentu.js.
D.getTimezoneOffset () zwraca przesunięcie strefy czasowej w minutach, a d.getTime () w ms, stąd x 60 000.
źródło
Oto, czego użyłem w poprzednich projektach:
źródło
getTimezoneOffset()/60
często zwracają wartość dziesiętną. Jest to szczególnie prawdziwe w przypadku dat sprzed 1900 r., Gdzie wiele miejsc miało przesunięcia w minutach i sekundach. Ponadto daty javascript są teraz wymagane do obsługi historycznych przesunięć. Np. W 1890 roku offset w Moskwie wynosił +2: 30: 17. Zobacz Przeglądarki, strefy czasowe, Chrome 67 Błąd .Plik
.getTimezoneOffset()
Metoda zgłasza strefy czasowej w minutach liczenia „Westwards” ze strefy czasowej GMT / UTC, w wyniku czego wartość odsunięcia, która jest ujemna, co jeden jest powszechnie przyzwyczajeni. (Przykładowo, czas w Nowym Jorku zostanie zgłoszony jako +240 minut lub +4 godziny)Aby uzyskać normalne przesunięcie strefy czasowej w godzinach, musisz użyć:
Ważny szczegół:
Zwróć uwagę, że czas letni jest uwzględniany w wyniku - więc to, co daje ta metoda, to tak naprawdę przesunięcie czasu, a nie rzeczywiste przesunięcie geograficzne strefy czasowej .
źródło
Z datą z kodu PHP użyłem czegoś takiego ...
Możemy to tak nazwać
źródło
Do tej pory mieszam odpowiedzi i dodaję do nich, ponieważ musiałem je wszystkie przeczytać i dodatkowo przez chwilę zbadać, aby wyświetlić ciąg daty i czasu z db w lokalnym formacie strefy czasowej użytkownika.
Ciąg daty i godziny pochodzi z bazy danych python / django w formacie: 2016-12-05T15: 12: 24.215Z
Wiarygodne wykrywanie języka przeglądarki w JavaScript wydaje się nie działać we wszystkich przeglądarkach (zobacz JavaScript do wykrywania preferencji językowych przeglądarki ), więc otrzymuję język przeglądarki z serwera.
Python / Django: wyślij żądanie języka przeglądarki jako parametr kontekstu:
HTML: napisz to w ukrytym wejściu:
JavaScript: pobierz wartość ukrytych danych wejściowych, np. En-GB, en-US; q = 0.8, en; q = 0.6 /, a następnie weź pierwszy język z listy tylko za pomocą zamiany i wyrażenia regularnego
JavaScript: przekonwertuj na datetime i sformatuj go:
Zobacz: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
Wynik to (język przeglądarki to en-gb): 12.05.2016, 14:58
źródło
źródło
options
części do mojego przypadku)Najlepszym rozwiązaniem, z jakim się spotkałem, jest utworzenie znaczników [time display = "llll" datetime = "UTC TIME" /] i użycie javascript (jquery) do przeanalizowania i wyświetlenia go w odniesieniu do czasu użytkownika.
http://momentjs.com/ Moment.js
ładnie wyświetli czas.
źródło
Możesz użyć poniższego, który podaje przesunięcie strefy czasowej w stosunku do GMT w minutach:
Uwaga: - ta funkcja zwraca liczbę ujemną.
źródło
getTimeZoneOffset () i toLocaleString są dobre do podstawowej pracy z datami, ale jeśli potrzebujesz obsługi prawdziwej strefy czasowej, spójrz na TimeZone.js mde .
W odpowiedzi na to pytanie omówiono jeszcze kilka opcji
źródło
Aby przekonwertować datę na datę lokalną, użyj metody toLocaleDateString ().
Aby przekonwertować czas na czas lokalny, użyj metody toLocaleTimeString ().
źródło
Nie wiem, jak to zrobić, ale javascript jest technologią po stronie klienta.
będzie zawierał czas i datę klienta (zgłoszone przez przeglądarkę, a co za tym idzie - komputer, na którym się znajduje). Włączenie czasu serwera do odpowiedzi i wykonanie prostych działań matematycznych w celu zgadnięcia przesunięcia czasu powinno być trywialne.
źródło