Почему Javascript getYear () возвращает 108?



почему этот javascript возвращает 108 вместо 2008? он получает день и Месяц правильно, но не год?



myDate = new Date();
year = myDate.getYear();


год = 108?

534   14  

14 ответов:

Это Y2K вещь, только годы с 1900 года считаются.

есть потенциальные проблемы совместимости теперь, что getYear() был осужден в пользу getFullYear() С quirksmode:

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

Ваш браузер дает следующие годы с этими двумя методами:

* The year according to getYear(): 108
* The year according to getFullYear(): 2008

есть также различия в реализации между Internet Explorer и Firefox, как реализация IE getYear() был изменен, чтобы вести себя как getFullYear() С IBM:

согласно спецификации ECMAScript, getYear возвращает год минус 1900, первоначально предназначенный для возврата " 98 " за 1998 год. возвратите устарела ECMAScript версии 3 и заменен на getFullYear ().

Internet Explorer изменил getYear (), чтобы работать как getFullYear () и сделать его Y2K-совместимым, в то время как Mozilla сохранила стандартное поведение.

С getFullYear не работает в старых браузерах, вы можете использовать что-то вроде этого:

Date.prototype.getRealYear = function() 
{ 
    if(this.getFullYear)
        return this.getFullYear();
    else
        return this.getYear() + 1900; 
};

прототип Javascript можно использовать для расширения существующих объектов, как и методы расширения C#. Теперь, мы можем просто сделать это:

var myDate = new Date();
myDate.getRealYear();
// Outputs 2008

проверяем документы. Это не проблема Y2K - это отсутствие проблемы Y2K! Это решение было принято первоначально на C и было скопировано в Perl, по-видимому JavaScript, и, вероятно, несколько других языков. Что давным-давно, по-видимому, все еще было желательно использовать двузначные годы, но удивительно, что тот, кто разработал этот интерфейс, имел достаточно предусмотрительности, чтобы понять, что им нужно подумать о том, что произойдет в 2000 году и за его пределами, поэтому вместо того, чтобы просто предоставить последние две цифры, они если количество лет с 1900 года. Вы можете использовать эти две цифры, если вы торопитесь или хотите быть рискованным. Или если вы хотите, чтобы ваша программа продолжала работать, вы можете добавить 100 к результату и использовать полноценные четырехзначные годы.

Я помню первый раз, когда я сделал манипуляции даты в Perl. Как ни странно я читать документы. По-видимому, это не обычная вещь. Через год или два меня вызвали в офис 31 декабря 1999 года, чтобы исправить ошибку, которая был обнаружен в последнюю минуту в каком-то контрактном Perl-коде, с которым я никогда не имел ничего общего. Именно эта проблема: стандартный вызов даты возвращал годы с 1900 года, и программисты рассматривали его как двузначный год. (Они предполагали, что получат "00" в 2000 году.) Будучи молодым неопытным программистом, я был поражен тем, что мы заплатили так много за "профессиональную" работу, и эти люди даже не потрудились прочитать документацию. Это было начало многих лет разочарование; теперь я стар и циничен. :)

в 2000 году ежегодная конференция YAPC Perl была названа "YAPC 19100" в честь этого часто сообщаемого не-бага.

В настоящее время, по крайней мере, в мире Perl, имеет смысл использовать стандартный модуль для обработки даты, который использует реальные четырехзначные годы. Не уверен, что может быть доступно для JavaScript.

Он должен вернуть количество лет с 1900 года.

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

это (как правильно указано в другом месте) является Y2K вещь. Netscape (написанный до 2000 года) первоначально вернулся, например 98 С getYear(). Вместо того, чтобы вернуться к 00, вместо этого он вернулся 100 за 2000 год. Затем появились другие браузеры и сделали это по-другому, и все были недовольны, поскольку царила несовместимость.

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

этот вопрос настолько стар, что заставляет меня плакать от ностальгии по дням доткомов!

правильно, дата.getYear () возвращает количество лет с 1900 года, так же, как и localtime () Perl. Интересно, почему язык, разработанный в 1990-х годах, не будет учитывать оборот века, но что я могу сказать? Ты должен был быть там. В то время это имело какой-то смысл (например pets.com сделал).

до 2000 года, возможно, был соблазн исправить эту ошибку путем добавления "19" к результату getYear () в результате чего "ошибка 19100 года". Другие уже достаточно ответили на этот вопрос (добавьте 1900 к результату getDate()).

может быть, книга, которую Вы читаете о JavaScript, немного старая?

Спасибо за взрыв из прошлого!

вы должны, как указано, никогда не использовать getYear(), но вместо того, чтобы использовать getFullYear().

история, однако, не так проста ,как " IE реализует GetYear() как getFullYear(). Опера и т. д. В эти дни лечат getYear() как getYear() изначально заданной даты до 2000 года, но будет рассматривать его как getFullYear() для дат после 2000 года, в то время как webkit и Firefox придерживаются старого поведения

выводит 99 во всех браузерах:

javascript:alert(new Date(917823600000).getYear());

это выводит 108 в FF / WebKit, и 2008 в Opera / IE:

javascript:alert(new Date().getYear());

Это глупо. Это даты до Y2K дней и теперь просто возвращает количество лет с 1900 по юридическим причинам. Использовать getFullYear (), чтобы получить фактический год.

Я использую date.getUTCFullYear(); работает без проблем.

число, которое вы получаете, - это количество лет с 1900 года. Не спрашивай меня почему..

он возвращает 4-значный год-1900, который, возможно, был крутым 9+ лет назад, но сейчас довольно отсталый. Ява есть Ява.утиль.Дата также делает это.

как говорили другие, он возвращает количество лет с 1900 года. Причина, почему это делает что это когда JavaScript был изобретен в середине 90-х годов, это поведение было одновременно удобным и совместимым с API даты-времени на других языках. В частности, C. И, конечно же, как только API был установлен, они не могли изменить его по причинам обратной совместимости.

кстати, разные браузеры могут возвращать разные результаты, поэтому лучше всего пропустить эту функцию и использовать getFullYear() всегда.

var date_object=новая дата(); var year = date_object.возвратите(); если(год

Comments

    Ничего не найдено.