Вопрос

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

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

год = 108?

Это было полезно?

Решение

Это 2000 год Дело в том, что учитываются только годы с 1900 года.

Теперь существуют потенциальные проблемы совместимости, getYear() был признан устаревшим в пользу getFullYear() - от причудливый режим:

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

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

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

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

Согласно спецификации ECMAScript, getYear возвращает год минус 1900, что изначально означало возврат «98» для 1998 года.getYear устарел в 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Однако история не так проста, как «IE реализует GetYear() как getFullYear().Opera и IE в наши дни лечат 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());

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

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

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

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

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

вар date_object = новая дата ();вар год = date_object.getYear();if (год <2000) {Год = год + 1900;} // ты получишь полный год ....

он возвращает 4-значный год - 1900, что, возможно, было круто более 9 лет назад, но сейчас это довольно отстало.Java java.util.Date также делает это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top