Cel: znajdź, local time
a UTC time offset
następnie utwórz adres URL w następującym formacie.
Przykładowy adres URL: / Actions / Sleep? Duration = 2002-10-10T12: 00: 00-05: 00
Format jest oparty na zaleceniach W3C: http://www.w3.org/TR/xmlschema11-2/#dateTime
Dokumentacja mówi:
Na przykład 2002-10-10T12: 00: 00−05: 00 (południe 10 października 2002 r., Środkowy czas letni i wschodni standardowy w USA) jest równy 2002-10-10T17: 00: 00Z, pięć godzin później niż 2002-10-10T12: 00: 00Z.
Więc opierając się na moim zrozumieniu, muszę znaleźć mój czas lokalny za pomocą nowej funkcji Date (), a następnie użyć funkcji getTimezoneOffset (), aby obliczyć różnicę, a następnie dołączyć go do końca ciągu.
1. Uzyskaj czas lokalny z formatem
var local = new Date().format("yyyy-MM-ddThh:mm:ss"); //today (local time)
wynik
2013-07-02T09:00:00
2.Uzyskaj przesunięcie czasu UTC o godzinę
var offset = local.getTimezoneOffset() / 60;
wynik
7
3.Skonstruuj adres URL (tylko część czasu)
var duration = local + "-" + offset + ":00";
wynik:
2013-07-02T09:00:00-7:00
Powyższe dane wyjściowe oznaczają, że mój czas lokalny to 2013/07/02 9 rano, a różnica w stosunku do UTC to 7 godzin (UTC jest 7 godzin przed czasem lokalnym)
Jak dotąd wydaje się, że działa, ale co się stanie, jeśli getTimezoneOffset () zwróci wartość ujemną, taką jak -120?
Zastanawiam się, jak powinien wyglądać format w takim przypadku, ponieważ nie mogę się domyślić z dokumentu W3C. Z góry dziękuję.
źródło
getTimezoneOffset()
zwraca przeciwny znak formatu wymaganego przez specyfikację, do której się odwołujesz.Ten format jest również znany jako ISO8601 , a dokładniej jako RFC3339 .
W tym formacie UTC jest reprezentowany przez
Z
chwilę, a wszystkie inne formaty są reprezentowane przez przesunięcie względem UTC. Znaczenie jest takie samo jak w JavaScript, ale kolejność odejmowania jest odwrócona, więc wynik ma przeciwny znak.Ponadto nie ma metody dla
Date
wywoływanego obiektu natywnegoformat
, więc funkcja w # 1 zakończy się niepowodzeniem, chyba że do tego celu użyjesz biblioteki. Zapoznaj się z tą dokumentacją .Jeśli szukasz biblioteki, która może współpracować bezpośrednio z tym formatem, polecam wypróbować moment.js . W rzeczywistości jest to format domyślny, więc możesz po prostu zrobić to:
Jest to dobrze przetestowane rozwiązanie dla różnych przeglądarek, które ma wiele innych przydatnych funkcji.
źródło
Myślę, że warto wziąć pod uwagę, że żądane informacje można uzyskać za pomocą jednego wywołania interfejsu API do biblioteki standardowej ...
Będziesz musiał dokonać zamiany tekstu, jeśli chcesz dodać ogranicznik „T”, usunąć „GMT-” lub dopisać „: 00” na końcu.
Ale wtedy możesz łatwo bawić się innymi opcjami, jeśli chcesz np. użyj 12 godzin lub pomiń sekundy itp.
Zauważ, że używam Szwecji jako ustawień regionalnych, ponieważ jest to jeden z krajów, w których używany jest format ISO 8601. Myślę, że większość krajów ISO używa tego formatu „GMT-4” dla przesunięcia strefy czasowej innego niż Kanada, który używa skrótu strefy czasowej, np. „EDT” dla wschodniego czasu dziennego.
Możesz uzyskać to samo z nowszej standardowej funkcji i18n "Intl.DateTimeFormat ()", ale musisz powiedzieć jej, aby zawierała czas za pomocą opcji, albo po prostu poda datę.
źródło
To jest moja funkcja dla strefy czasowej klienta, jest lekka i prosta
źródło
Sprawdź to:
źródło
Moment.js nie jest potrzebny: oto pełna odpowiedź w obie strony, od typu wejściowego „datetime-local”, który generuje ciąg ISOLokalny do sekund UTC w czasie GMT i wstecz:
źródło
Tylko moje dwie wysyłają tutaj
Miałem do czynienia z tym problemem z datami, więc zrobiłem to:
Następnie zapisz datę do bazy danych, aby móc ją porównać z jakimś zapytaniem.
Żeby zainstalować
moment-timezone
źródło
Moja odpowiedź to niewielka zmiana dla tych, którzy chcą po prostu dzisiejszą datę w lokalnej strefie czasowej w formacie RRRR-MM-DD.
Wyjaśnię:
Mój cel: uzyskaj dzisiejszą datę w strefie czasowej użytkownika, ale w formacie ISO8601 (RRRR-MM-DD)
Oto kod:
To działa, ponieważ ustawienia narodowe Szwecji używają formatu ISO 8601.
źródło
Oto funkcje, których użyłem w tym celu:
źródło
Możesz to osiągnąć za pomocą kilku prostych metod rozszerzania. Poniższa metoda rozszerzenia daty zwraca tylko składnik strefy czasowej w formacie ISO, a następnie można zdefiniować inny dla części daty / godziny i połączyć je w celu uzyskania pełnego ciągu przesunięcia daty i godziny.
Przykładowe użycie:
Wiem, że jest rok 2020 i większość ludzi prawdopodobnie używa już Moment.js, ale proste rozwiązanie do kopiowania i wklejania jest nadal przydatne.
(Powodem, dla którego podzieliłem metody daty / godziny i przesunięcia, jest to, że używam starej biblioteki Datejs, która już zapewnia elastyczną
toString
metodę z niestandardowymi specyfikatorami formatu, ale po prostu nie zawiera przesunięcia strefy czasowej. Dlatego dodałemtoISOLocaleString
dla każdego bez wspomniana biblioteka).źródło