Почему этот javascript возвращает 108 вместо 2008? он получает правильный день и месяц, но не год?
myDate = new Date();
year = myDate.getYear();
год = 108?
javascript
date
ctrlShiftBryan
источник
источник
year = myDate.getFullYear() % 100;
Ответы:
Это проблема 2000 года , учитываются только годы с 1900 года.
Теперь есть потенциальные проблемы совместимости, которые
getYear()
устарели в пользуgetFullYear()
- from quirksmode :Существуют также различия в реализации между Internet Explorer и Firefox, поскольку реализация IE
getYear()
была изменена, чтобы вести себя какgetFullYear()
- от IBM :источник
Поскольку getFullYear не работает в старых браузерах, вы можете использовать что-то вроде этого:
Прототип Javascript можно использовать для расширения существующих объектов, как и методы расширения C #. Теперь мы можем просто сделать это;
источник
Проверьте документы. Это не проблема 2000 года - это проблема отсутствия проблемы 2000 года! Это решение было изначально принято на C и было скопировано в Perl, по-видимому, в JavaScript и, возможно, в несколько других языков. Давным-давно, по-видимому, все еще было желательно использовать двузначные числа, но, что удивительно, тот, кто разработал этот интерфейс, имел достаточно предусмотрительности, чтобы понять, что им нужно подумать о том, что произойдет в 2000 году и позже, поэтому вместо того, чтобы просто предоставить последние два цифр, они предоставили количество лет, прошедших с 1900 года. Вы можете использовать две цифры, если спешите или хотите пойти на риск. Или, если вы хотите, чтобы ваша программа продолжала работать, вы можете добавить к результату 100 и использовать полноценные четырехзначные годы.
Я помню, как впервые сделал манипуляции с датами в Perl. Как ни странно, я читал документы . Видимо это не обычное дело. Год или два спустя 31 декабря 1999 года меня вызвали в офис, чтобы исправить ошибку, обнаруженную в последнюю минуту в каком-то контрактном коде Perl, с которым я никогда не имел ничего общего. Это была именно та проблема: стандартный вызов даты возвращал годы с 1900 года, а программисты считали это годом двузначным числом. (Они предполагали, что в 2000 году получат «00».) Как молодой неопытный программист, я просто поразился тому, что мы так много заплатили за «профессиональную» работу, и эти люди даже не удосужились прочитать документация. Это было началом многих лет разочарования; теперь я стар и циничен. :)
В 2000 году ежегодная конференция YAPC Perl называлась «YAPC 19100» в честь этой часто сообщаемой не-ошибки.
В настоящее время, по крайней мере, в мире Perl, имеет больше смысла использовать стандартный модуль для обработки даты, который использует реальные четырехзначные числа. Не уверен, что может быть доступно для JavaScript.
источник
Он должен возвращать количество лет, прошедших с 1900 года.
источник
использовать
date.getFullYear()
.Это (как правильно указано в другом месте) проблема 2000 года. Netscape (написанный до 2000 года) первоначально вернулся, например,
98
изgetYear()
. Вместо того, чтобы вернуться00
, он вернулся100
в 2000 году. Затем появились другие браузеры, которые сделали это по-другому, и все были недовольны, поскольку царила несовместимость.Более поздние браузеры поддерживали
getFullYear
стандартный метод для возврата полного года.источник
Этот вопрос настолько старый, что заставляет меня плакать от ностальгии по дням доткомов!
Правильно, Date.getYear () возвращает количество лет, прошедших с 1900 года, точно так же, как Perl localtime (). Возникает вопрос, почему язык, разработанный в 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 во всех браузерах:
Это выводит 108 в FF / WebKit и 2008 в Opera / IE:
источник
Это глупо. Он датируется днями до 2000 года , а теперь просто возвращает количество лет, прошедших с 1900 года, по причинам наследия. Используйте getFullYear (), чтобы получить фактический год.
источник
Я использую
date.getUTCFullYear()
; работает без проблем.источник
Вы получите число, прошедшее с 1900 года. Не спрашивайте меня, почему ..
источник
Как говорили другие, он возвращает количество лет, прошедших с 1900 года. Причина, по которой он это делает , заключается в том, что, когда в середине 90-х был изобретен JavaScript, такое поведение было одновременно удобным и согласованным с API-интерфейсами даты и времени на других языках. В частности C. И, конечно же, как только API был установлен, они не могли его изменить по причинам обратной совместимости.
источник
Кстати, разные браузеры могут возвращать разные результаты, поэтому лучше вообще пропустить эту функцию и всегда использовать getFullYear ().
источник
var date_object = новая дата (); var year = date_object.getYear (); если (год <2000) {год = год + 1900; } // вы получите полный год ....
источник
он возвращает четырехзначный год - 1900, что, возможно, было круто 9+ лет назад, но сейчас довольно отстает. Java java.util.Date также делает это.
источник