2015-06-11 3 views
0

Недавно я столкнулся с проблемой с ненадежными датами в javascript.Функция Javascript Date(), аномалии

Вот пример, который вы можете протестировать в своей собственной консоли браузера, чтобы воспроизвести проблему.

s = new Date(0); s.setYear(2015); s 
//Thu Dec 31 2015 18:00:00 GMT-0600 (Central Standard Time) 

s.setMonth(5); s 
//Wed Jul 01 2015 18:00:00 GMT-0500 (Central Daylight Time) 

s.setMonth(6); s 
//Wed Jul 01 2015 18:00:00 GMT-0500 (Central Daylight Time) 

Как вы можете видеть, установить месяц 5 (июня) такой же, как 6 (июль), оба возвращают июль. Это разрешено вместо использования - новой даты() вместо новой даты (0).

Я просто хотел бы понять, почему это происходит. Повторяя, хотел бы понять ПОЧЕМУ. Может ли кто-нибудь описать это поведение?

https://wordpress.org/support/topic/front-end-submit-events-off-by-1month?replies=5#post-7059058

ответ

2
  • Дата изначально 31 декабря 2015.
  • s.setMonth(5) устанавливает месяц до июня (месяцы индексируются с нулевой отметкой), поэтому вы устанавливаете дату на 31 июня 2015 года.
  • Нет такой даты (т. Е. Июнь имеет 30 дней), поэтому она переворачивается до 1 июля 2015 года.
  • Установка месяца в июле с s.setMonth(6) ничего не делает, поскольку дата уже в июле.

new Date() использует текущую дату (и сегодня это не 31-й), поэтому этот опрос 31-к-1 не происходит.

+0

отлично, это было то, что я хотел понять. Спасибо! – Barry

1

Причина вопроса обсуждается здесь: javascript new Date(0) class shows 16 hours?

Таким образом, в вашем случае, не передать 0 в Date();

var s = new Date(); s.setYear(2015); 
 

 
document.write(s); 
 
document.write("<br/>"); 
 

 
s.setMonth(5); 
 

 
document.write(s); 
 
document.write("<br/>"); 
 

 

 
s.setMonth(6); 
 

 
document.write(s)

+0

Удивительное спасибо! я не видел эту ссылку, она действительно объясняет проблему. :) – Barry

Смежные вопросы