Po pierwsze, myślę, że strefa czasowa prawdopodobnie ma coś z tym wspólnego. Jestem w EST/EDT. Testuję to również na chromium 17/linux.Konstruktor daty: argumenty liczbowe a argumenty łańcuchowe podające różne daty w niektórych przypadkach
Teraz, powiedzmy, że tworzę dwie daty tak:
// December 5
dateFromNumbers = new Date(2020, 11, 5);
dateFromString = new Date("2020-12-5");
wydaje te daty powinny mieć identyczne znaczniki czasu, a oni:
+dateFromNumbers == +dateFromString; // true
... przynajmniej w tym przypadku . Ale w niektórych przypadkach nie:
// December 15
dateFromNumbers = new Date(2020, 11, 15);
dateFromString = new Date("2020-12-15");
+dateFromNumbers == +dateFromString; // false
Co tu się dzieje?
dateFromNumbers; // Tue Dec 15 2020 00:00:00 GMT-0500 (EST)
dateFromString; // Mon Dec 14 2020 19:00:00 GMT-0500 (EST)
Wygląda dateFromString
wynosi 5 godzin wcześniej niż dateFromNumbers
w tym przypadku (EST to GMT - 5, jestem pewien, że jest to związane w jakiś sposób).
Wydaje się mieć wpływ na koniec miesięcy od października do grudnia. Oto skrzypce, które ułatwiają sprawdzenie, które dni się różnią (chyba, że jesteś czerwono-zielony, co może być trudne do zobaczenia, moje przeprosiny).
Co daje?
Uwagi:
- Można ustawić strefę czasową systemu do EST/EDT zobaczyć jsfiddle przykład jak widzę go.
- Liczby miesięcy w Datach są oparte na zera;
11
nie jest literówką. - Ten problem pojawia się w każdym roku, który sprawdziłem.
W twoim drugim przypadku jest 15 listopada, 2020 i 15 grudnia 2020. czy to literówka? – Habib
Uruchamianie Chrome 18.0.1025.162 m, Windows, GMT +2: wyniki są powtarzalne. Ale jednoznaczne określenie czasu w reprezentacji ciągów rozwiązuje problem. Generalnie unikam dat z łańcuchów, ponieważ obsługa formatów w różnych przeglądarkach jest różna i słabo udokumentowana, milisekundy są o wiele bardziej niezawodne. – DCoder