javascript date getYear () возвращает разные результаты между IE и Firefox, как подойти к этому? - PullRequest
8 голосов
/ 23 апреля 2011

Видимо, метод getYear () из объекта даты в javascript возвращает разные результаты в IE8 и Firefox3.6 (у меня есть эти 2 на моей машине, я не уверен, что другой браузер или версия)

Date d = new Date();
alert(d.getYear());

FF3.6 ==> 111 (year since 1900? i guess)
IE8 ===> 2011

Я только тестировалв Firefox и теперь мой код Javascript, который корректирует возвращаемое значение getYear (), теперь дает мне 3911 из-за моего кодирования.

var modified = d.getYear() + 1900

В Firefox он возвращает 2011. Но если я применяю этот подход в IE8, этоreturn 3911.

Я мог бы добавить логику, чтобы различать IE и Firefox, но я не хочу добавлять такие if / else везде в моем коде, где бы ни были части, зависящие от браузера, как это.Есть ли другой способ решения этой проблемы?

var browserName=navigator.appName; 

if (browserName=="Netscape") { 
   var modified = d.getYear() + 1900
}
else if(browserName=="Microsoft Internet Explorer") { 
   var modified = d.getYear();
}

Ответы [ 5 ]

20 голосов
/ 23 апреля 2011

Используйте getFullYear() вместо getYear().

8 голосов
/ 23 апреля 2011

попробуйте использовать getFullYear () вместо getYear

4 голосов
/ 23 апреля 2011

Не полагайтесь на версии продукта, когда это не нужно. Вместо этого полагайтесь на разницу, которую хотите исправить. Если вы хотите getYear правильное значение, вы можете получить его, используя

Date d = new Date();
var year = d.getYear();
if (year < 1900) {  // Should always be true, but isn't in older IE.
   year += 1900;
}

Я понимаю, что люди предложили лучший способ получить результат , но я подумал, что на вопрос стоит ответить.

4 голосов
/ 23 апреля 2011

Если IE8 дает вам 2011, Это ошибка в IE8 (и ранее, см. Обновление ниже) .getYear определяется в спецификации (Раздел B.2.4) следующим образом:

  1. Пусть t будет значением этого времени.
  2. Если t равно NaN, вернуть NaN.
  3. Return YearFromTime(LocalTime(t)) − 1900.

Таким образом, прямо сейчас 111 является правильным значением.Это определение не отличается от 3-го издания, поэтому мы говорим о ~ 12 лет определенного поведения.

Как уже говорили другие, используйте getFullYear, чтобы получить более полезное значение, но это ошибка IE8 если это действительно так, как вы говорите (у меня IE8 не под рукой, чтобы проверить) .


Обновление : Ну, я буду.Только что попробовал, и Microsoft сделал неправильно.IE6, IE7 и IE8 все говорят «2011».Хорошая новость в том, что они наконец исправили это, IE9 говорит «111», как и должно.Вы можете попробовать это в своем браузере здесь: http://jsbin.com/ofuyi3

2 голосов
/ 23 апреля 2011

Использовать date.getFullYear ();

бла .. должен ответить не менее чем из 30 символов ...

...