Подтвердить что ты не робот

Функция Javascript Date.UTC() отключена на месяц?

Я играл с Javascript, создавая простые обратные часы, когда я сталкивался с этим странным поведением:

var a = new Date(), 
now = a.getTime(),
then = Date.UTC(2009,10,31),
diff = then - now,
daysleft = parseInt(diff/(24*60*60*1000));
console.log(daysleft );

Дни, оставшиеся налево, отключены на 30 дней.

Что не так с этим кодом?

Изменить: я изменил имена переменных, чтобы сделать их более понятными.

4b9b3361

Ответ 1

Месяц основан на нулевом значении для JavaScript.

Дни и годы основаны на одном.

Показать рисунок.

UPDATE

Причина в том, что из создателя JavaScript,

JS должен был "выглядеть как Java" только в меньшей степени, будь то негромкий младший брат или мальчик-заложник. Кроме того, я должен был быть сделан через десять дней или что-то еще хуже, чем JS.

http://www.jwz.org/blog/2010/10/every-day-i-learn-something-new-and-stupid/#comment-1021

Ответ 2

Как сказал Эрик, это связано с тем, что месяцы перечислены как диапазон 0-11.

Это обычное поведение - то же самое относится к результатам Perl из localtime() и, возможно, к многим другим языкам.

Это, скорее всего, первоначально унаследовано от вызова localtime() Unix. (делать "местное время" )

Причина заключается в том, что дни/годы являются их собственными целыми числами, а месяцы (как #) - это индексы массива, которые на большинстве языков, особенно C, где базовый вызов реализован в Unix, начинаются с 0.

Ответ 3

date1 = new Date();
//year, month, day [, hrs] [, min] [, sec]
date1 = new Date.UTC(date1.getFullYear(),date1.getMonth()+1,date1.getDate(),date1.getHours(),date1.getMinutes(),date1.getSeconds());

date2 = new Date();
date2 = date2.getTime();

alert(date1)
alert(date2)