2014-01-17 2 views
3

Следующий код:Javascript Дата Объяснение

//var d = new Date(year, month, day, hours, minutes, seconds, milliseconds); 
var today = new Date(2013,0,31); 
var tomorrow = new Date(); 
tomorrow.setDate(today.getDate() + 1); 
alert("New date is "+tomorrow.getFullYear() +", "+ tomorrow.getMonth()+", "+ tomorrow.getDate()) 

... Выходы: 2014, 1, 1

(Demo: http://jsfiddle.net/3pA3Q/5/)

Может кто-нибудь объяснить это?

Кроме того, эти два имеют один и тот же результат:

var today = new Date(2013,11,31); 
var today = new Date(2013,12,31); 

Я понимаю, «месяц, начиная с 0 за январь до 11 за декабрь», так new Date(2013,12,31) должен быть год 2014, январь 31

+0

Пожалуйста, включите код непосредственно в вопросы, не полагаться на ссылки на внешние сайты (я редактировал его за вас). Две строки, которые, как вы говорите, имеют «тот же результат», создают объекты даты для двух разных дат, но тогда ваш другой код использует 'today.getDate()', который извлекает только день месячной части даты, которая _will_ будет тот же ... – nnnnnn

+0

@nnnnnn Да, я дважды тестировал. Это то же самое «2014, 1, 1». –

+0

Дата «завтра» заканчивается одинаково в любом случае, потому что вы используете только день месяца из «сегодняшней» даты. – nnnnnn

ответ

3

You initialized tomorrow, чтобы быть сегодняшней датой, поэтому в этой строке tomorrow.setDate(today.getDate() + 1); вы просто добавляете 1 день к сегодняшней дате.

Вы бы лучше клонировать дату:

var today = new Date(2013,0,31); 
var tomorrow = new Date(today.getTime()); // Get a copy 
tomorrow.setDate(tomorrow.getDate() + 1); 
Смежные вопросы