Javascript Date.UTC () функция отключена на месяц? - PullRequest
49 голосов
/ 02 октября 2009

Я играл с 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 дней.

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

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

Ответы [ 3 ]

93 голосов
/ 02 октября 2009

Для JavaScript месяц начинается с нуля.

Дни и годы едины.

Иди цифра.

UPDATE

Причина, по которой это так, от создателя JavaScript , заключается в

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

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

7 голосов
/ 02 октября 2009

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

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

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

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

0 голосов
/ 04 августа 2010
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...