2013-07-22 2 views
1

У меня есть следующий фрагмент кода JavaScript, я использую для рендеринга диапазон дат текущего месяца в этом же месяце в прошлом году:разница в датах рендеринга - IE JavaScript vs. Chrome JavaScript

var today = new Date(); 
var endDate = new Date(today.getFullYear(), today.getMonth(), 1); 
var startDate = new Date(endDate.getYear() - 1, endDate.getMonth() - 1, 1); 

В IE 8 это дает мне правильный диапазон дат:

Пт 1 июня 00:00:00 MST 2012 - пн 1 июля 00:00:00 MST 2013

Когда я запускаю тот же код в Chrome,Я получаю следующий диапазон дат:

Ср Июн 01 0112 00:00:00 MST - Пн Июл 01 2013 00:00:00 MST

год на дату начала 0112. Что мне нужно сделать, чтобы получить правильный диапазон дат в IE и Chrome?

+0

"Метод getYear возвращает год минус 1900" - см [MDN] (HTTPS://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getYear) – metadings

ответ

5

Что мне нужно сделать, чтобы получить правильный диапазон дат в IE и Chrome?

Использование getFullYear() как для endDate и startDate:

var startDate = new Date(endDate.getFullYear() - 1, endDate.getMonth() - 1, 1); 

getYear() должен был вернуться короткий год - 96 для 1996. Но его поведение варьировалось между браузерами для дат с годами за пределами 1900-х годов.

В частности, IE 4 - 8 подражать getFullYear() других лет:

В Internet Explorer 4.0 через режим 8 стандартов Internet Explorer, формула зависит от года. За период с 1900 по 1999 год возвращаемое значение представляет собой двузначное значение, которое хранится в году минус 1900. Для дат вне этого диапазона возвращается 4-значный год. Например, 1996 возвращается как 96, но 1825 и 2025 возвращаются как есть.

IE9 вернулся в standardized behavior, что вы наблюдаете в Chrome, где (псевдо-код):

getYear() == getFullYear() - 1900 
+0

Спасибо за подробное объяснение с ответом. –

2

getYear - это устаревшая функция, которая возвращает год минус 1900. Вместо этого вы должны использовать getFullYear().

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