Є кілька божевільних речей, які трапляються з об’єктом JS DATE, який перетворює рядки, наприклад, враховуйте наступну дату, яку ви вказали
Примітка . Наступні приклади можуть бути або не бути ОДНИМИ ВИМКНЕННЯМ залежно від ВАШОГО часового поясу та поточного часу.
new Date("2011-09-24"); // Year-Month-Day
// => Fri Sep 23 2011 17:00:00 GMT-0700 (MST) - ONE DAY OFF.
Однак, якщо ми переставимо формат рядка на місяць-день-рік ...
new Date("09-24-2011");
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
Ще один дивний
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.
Ми можемо легко змінити дефіси у вашу дату "2011-09-24" під час створення нової дати
new Date("2011-09-24".replace(/-/g, '\/')); // => "2011/09/24".
=> // Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
Що робити, якщо у нас був рядок дати типу "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.
Тепер поміняйте дефіс на косу рису, як і раніше; Що станеться?
new Date("2011/09/24T00:00:00");
// => Invalid Date
Як правило, я повинен керувати форматом дати 2011-09-24T00: 00: 00, тому я це роблю.
new Date("2011-09-24T00:00:00".replace(/-/g, '\/').replace(/T.+/, ''));
// => Sat Sep 24 2011 00:00:00 GMT-0700 (MST) - CORRECT DATE.
ОНОВЛЕННЯ
Якщо ви надаєте окремі аргументи конструктору Date, ви можете отримати інші корисні результати, як описано нижче
Примітка: аргументи можуть бути типу Number або String. Я покажу приклади зі змішаними значеннями.
Отримайте перший місяць та день заданого року
new Date(2011, 0); // Normal behavior as months in this case are zero based.
=> // Sat Jan 01 2011 00:00:00 GMT-0700 (MST)
Отримайте останній місяць та день року
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)
Приклад аргументів числа, рядків. Зауважте, що місяць березень, оскільки знову нульовий місяць
new Date(2011, "02");
=> // Tue Mar 01 2011 00:00:00 GMT-0700 (MST)
Якщо ми робимо те саме, але з нульовим днем, ми отримуємо щось інше.
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)
Якщо додати день нуля до будь-якого аргументу року та місяця, ви отримаєте останній день попереднього місяця. Якщо ви продовжите негативні цифри, ви можете продовжити відкат ще один день
new Date(2011, "02", -1);
=> // Sun Feb 27 2011 00:00:00 GMT-0700 (MST)