Istnieje kilka szalonych rzeczy, które mają miejsce w przypadku obiektu JS DATE, który konwertuje ciągi znaków, na przykład rozważ podaną przez ciebie datę
Uwaga: Poniższe przykłady mogą lub nie mogą być jeden dzień wolny w zależności od TWOJEJ strefę czasową i aktualny czas.
new Date("2011-09-24"); // Year-Month-Day
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
Jeśli jednak zmienimy format ciągu na Miesiąc-Dzień-Rok ...
new Date("09-24-2011");
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
Kolejny dziwny
new Date("2011-09-24");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF AS BEFORE.
new Date("2011/09/24"); // change from "-" to "/".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
Możemy łatwo zmienić myślniki w dacie „2011-09-24” podczas tworzenia nowej daty
new Date("2011-09-24".replace(/-/g, '\/')); // => "2011/09/24".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
Co gdybyśmy mieli ciąg daty, taki jak „2011-09-24T00: 00: 00”
new Date("2011-09-24T00:00:00");
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
Teraz zmień myślnik na ukośnik tak jak poprzednio; co się dzieje?
new Date("2011/09/24T00:00:00");
// => Invalid Date
Zwykle muszę zarządzać formatem daty 2011-09-24T00: 00: 00, więc to właśnie robię.
new Date("2011-09-24T00:00:00".replace(/-/g, '\/').replace(/T.+/, ''));
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
AKTUALIZACJA
Jeśli podasz osobne argumenty konstruktorowi daty, możesz uzyskać inne przydatne dane wyjściowe, jak opisano poniżej
Uwaga: argumenty mogą być typu Number lub String. Pokażę przykłady z mieszanymi wartościami.
Uzyskaj pierwszy miesiąc i dzień danego roku
new Date(2011, 0); // Normal behavior as months in this case are zero based.
=> // Sat Jan 01 2011 00:00:00 GMT-0700 (MST)
Uzyskaj ostatni miesiąc i dzień roku
new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
=> // Sat Dec 31 2011 00:00:00 GMT-0700 (MST)
Przykład argumentów Number, String. Zauważ, że miesiącem jest marzec, ponieważ ponownie miesiącami są zero.
new Date(2011, "02");
=> // Tue Mar 01 2011 00:00:00 GMT-0700 (MST)
Jeśli zrobimy to samo, ale z zerowym dniem, otrzymamy coś innego.
new Date(2011, "02", 0); // again the zero roles back from March to the last day of February.
=> // Mon Feb 28 2011 00:00:00 GMT-0700 (MST)
Dodanie dnia zero do dowolnego argumentu roku i miesiąca spowoduje uzyskanie ostatniego dnia poprzedniego miesiąca. Jeśli będziesz kontynuować z liczbami ujemnymi, możesz kontynuować cofanie o kolejny dzień
new Date(2011, "02", -1);
=> // Sun Feb 27 2011 00:00:00 GMT-0700 (MST)