Zauważyłem coś dziwnego z strefami czasowymi i obiektem JavaScript Date
.Czy istnieje sposób reprezentowania 21 października 2012 r. W obiekcie JavaScript "Date"?
Trying to na Linuksie:
$ TZ='America/Sao_Paulo' js
js> new Date(2012, 9, 21, 0, 0, 0).toString()
"Sat Oct 20 2012 23:00:00 GMT-0300 (BRST)"
znalazłem to niemożliwe, aby uzyskać obiekt, który reprezentuje 21th of October 2012. Każdy próbami, aby uzyskać Date
między 00:00 a 01:00 tego samego dnia daje datę w dniu poprzedzającym od 23:00 do 00:00.
(użytkownik Windows może zmienić swoją strefę czasową Brasilia/GMT-03 doświadczyć samo zachowanie)
Dodawanie jedną godzinę (lub jeden dzień) do takiego wyników data obiektów w powrocie tę samą datę.
Przypuszczam, że ma to związek z czasem letnim, który ma miejsce w tym dniu w Brazylii, ale absolutnie nie wiem, jak sobie z tym poradzić.
Mam pętlę, która iteruje dni miesiąca (dla aplikacji kalendarza) i oczywiście pętle na zawsze w takim przypadku po osiągnięciu 20 października 2012.
Musi być coś robię źle, ale nie wiem, jak sobie z tym poradzić, jak sądzę, że może się to zdarzyć również w innych strefach czasowych.
Jaki jest zalecany sposób postępowania z Date
w Javascript, aby upewnić się, że takie problemy związane z czasem strefy czasowej/zmianą czasu nie występują?
Dzięki za odpowiedź. Jednak moim problemem nie jest uzyskanie reprezentacji ciągów daty, ale uzyskanie poprawnego obiektu, który reprezentuje ten dokładny moment. – ereOn
Następnie wystarczy użyć metody UTC: 'new Date (Date.UTC (2012, 9, 21, 0, 0, 0));' – bjornd
To rzeczywiście działa lepiej. Czy mógłbyś edytować odpowiedź, aby było bardziej oczywiste, jakie jest prawdziwe rozwiązanie? Chętnie to zaakceptuję :) – ereOn