2015-02-09 5 views
2

При разработке дополнения к firefox следующие результаты дают разные результаты?Дата выпуска Javascript при использовании setMonth

var out = document.getElementById('out'); 
 

 
out.textContent += new Date(2015, 1, 6, 16, 0, 0, 0) + '\n'; // -> Date "2015-02-06T15:00:00.000Z" correct, months are zero-based 
 
var dt = new Date(0, 0, 0, 0, 0, 0, 0); 
 
dt.setFullYear(2015); 
 
dt.setMonth(1); 
 
dt.setDate(6); 
 
dt.setHours(16); 
 
out.textContent += dt + '\n'; // -> Date "2015-03-06T15:00:00.000Z" ??
<pre id="out"></pre>

Проблема заключается в setMonth (1) устанавливает марта во втором случае. Это происходит с произвольными датами, другие даты отлично подходят для обоих подходов. Любая идея почему?

var out = document.getElementById('out'); 
 

 
out.textContent += new Date(2015, 0, 30, 16, 0, 0, 0) + '\n'; // -> 2015-01-30T15:00:00.000Z" months are zero-based 
 
var dt = new Date(0, 0, 0, 0, 0, 0, 0); 
 
dt.setFullYear(2015); 
 
dt.setMonth(0); 
 
dt.setDate(30); 
 
dt.setHours(16); 
 
out.textContent += dt + '\n'; // -> 2015-01-30T15:00:00.000Z
<pre id="out"></pre>

ответ

4

Это из-за упаковки, и не имеет ничего общего с Firefox или Firefox аддонов.

var dt = new Date(0, 0, 0, 0, 0, 0, 0); 
dt.setFullYear(2015); 
dt.setMonth(1); 
dt.setDate(6); 
dt.setHours(16); 

Первоначально dt является 31 декабря 1899.

Теперь мы устанавливаем его в 2015 году: 31 дек 2015

Месяц становится февраль, а потому, что февраль имеет только 28 дней, он обтекает до марта: 03 марта 2015 года

И, конечно же, дата шестой, поэтому 6 марта.

+0

большое спасибо! Изменено название, чтобы не обвинять надстройки Firefox :) – BennyHilarious

+0

@scimonster. Это причина, но есть ли у вас какие-либо общие рекомендации, чтобы предотвратить это? – Xotic750

+0

@ Xotic750 Создайте все сразу. – Scimonster