Dlaczego ten javascript zwraca 108 zamiast 2008? ma prawidłowy dzień i miesiąc, ale nie rok?
myDate = new Date();
year = myDate.getYear();
rok = 108?
javascript
date
ctrlShiftBryan
źródło
źródło
year = myDate.getFullYear() % 100;
Odpowiedzi:
To kwestia Y2K , liczone są tylko lata od 1900 roku.
Istnieją teraz potencjalne problemy ze zgodnością, które
getYear()
zostały wycofane na korzyśćgetFullYear()
- od quirksmode :Istnieją również różnice implementacyjne między przeglądarką Internet Explorer i Firefox, ponieważ implementacja IE
getYear()
została zmieniona, aby zachowywać się jakgetFullYear()
- od IBM :źródło
Ponieważ getFullYear nie działa w starszych przeglądarkach, możesz użyć czegoś takiego:
Prototyp JavaScript może służyć do rozszerzania istniejących obiektów, podobnie jak metody rozszerzające C #. Teraz możemy to zrobić;
źródło
Sprawdź dokumenty. To nie jest problem roku 2000 - to brak problemu roku 2000! Ta decyzja została podjęta pierwotnie w C i została skopiowana do Perla, najwyraźniej JavaScript i prawdopodobnie kilku innych języków. Dawno temu najwyraźniej nadal wydawało się pożądane, aby używać dwucyfrowych lat, ale zadziwiająco każdy, kto zaprojektował ten interfejs, miał dość przewidywania, aby zdać sobie sprawę, że musi pomyśleć o tym, co stanie się w roku 2000 i później, więc zamiast podawać tylko ostatnie dwa cyfry, podali liczbę lat od 1900 roku. Możesz użyć dwóch cyfr, jeśli się spieszysz lub chcesz ryzykować. Lub jeśli chcesz, aby Twój program nadal działał, możesz dodać 100 do wyniku i użyć pełnoprawnych czterocyfrowych lat.
Pamiętam, jak pierwszy raz manipulowałem datą w Perlu. O dziwo, przeczytałem dokumenty . Najwyraźniej nie jest to powszechne. Rok lub dwa później wezwano mnie do biura 31 grudnia 1999 r., Aby naprawić błąd, który został wykryty w ostatniej możliwej chwili w jakimś kontraktowym kodzie Perla, rzecz, z którą nigdy nie miałem nic wspólnego. Chodziło dokładnie o tę kwestię: standardowe wywołanie daty zwracało lata od 1900 roku, a programiści traktowali to jako rok dwucyfrowy. (Zakładali, że dostaną „00” w 2000 roku). Jako młody, niedoświadczony programista, zszokowało mnie, że zapłaciliśmy tyle ekstra za pracę „profesjonalną”, a ci ludzie nawet nie zadali sobie trudu, aby przeczytać dokumentacja. To był początek wielu lat rozczarowań; teraz jestem stary i cyniczny. :)
W 2000 roku coroczna konferencja YAPC Perl była nazywana „YAPC 19100” na cześć tego często zgłaszanego braku błędu.
W dzisiejszych czasach, przynajmniej w świecie Perla, bardziej sensowne jest użycie standardowego modułu do obsługi dat, który wykorzystuje prawdziwe czterocyfrowe lata. Nie wiem, co może być dostępne dla JavaScript.
źródło
Musi zwracać liczbę lat od roku 1900.
źródło
używać
date.getFullYear()
.To jest (jak słusznie wskazano w innym miejscu) jest to sprawa roku 2000. Netscape (napisany przed 2000 rokiem) pierwotnie zwrócony, na przykład
98
zgetYear()
. Zamiast wracać do00
, powrócił100
w roku 2000. Potem pojawiły się inne przeglądarki i zrobiły to inaczej i wszyscy byli nieszczęśliwi, ponieważ panowała niezgodność.Późniejsze przeglądarki były obsługiwane
getFullYear
jako standardowa metoda zwracania pełnego roku.źródło
To pytanie jest tak stare, że płaczę z nostalgii za dniami dotcomów!
Zgadza się, Date.getYear () zwraca liczbę lat od 1900 roku, podobnie jak localtime () w Perlu. Można się zastanawiać, dlaczego język zaprojektowany w latach 90. nie uwzględniałby przemian stulecia, ale co mogę powiedzieć? Trzeba było tam być. W tamtym czasie miało to jakiś sens (tak jak zwierzęta. Com).
Przed 2000 rokiem można było pokusić się o naprawienie tego błędu przez dodanie „19” do wyniku getYear (), co spowodowało „błąd roku 19100” . Inni już odpowiedzieli wystarczająco na to pytanie (dodaj 1900 do wyniku getDate ()).
Może książka, którą czytasz o JavaScript jest trochę stara?
Dzięki za podmuch z przeszłości!
źródło
Jak wskazano, nigdy nie należy używać
getYear()
, ale zamiast tego używaćgetFullYear()
.Historia nie jest jednak tak prosta, jak „implementacje IE
GetYear()
jakgetFullYear()
. Opera i IE obecnie traktujągetYear()
tak, jakgetYear()
pierwotnie określono dla dat sprzed 2000 r., Ale będą traktować je jakogetFullYear()
daty po 2000 r., Podczas gdy webkit i Firefox trzymają się starego zachowaniaTo daje 99 we wszystkich przeglądarkach:
To daje 108 w FF / WebKit i 2008 w Operze / IE:
źródło
To głupie. To pochodzi z pre-Y2K dni , a teraz po prostu zwraca liczbę lat od roku 1900 ze względów starszych. Użyj getFullYear (), aby uzyskać rzeczywisty rok.
źródło
Używam
date.getUTCFullYear()
; działa bez problemów.źródło
Otrzymana liczba to liczba lat od 1900 roku. Nie pytaj mnie dlaczego ...
źródło
Jak powiedzieli inni, zwraca liczbę lat od 1900 roku. Powodem tego jest fakt, że kiedy wynaleziono JavaScript w połowie lat 90., zachowanie to było zarówno wygodne, jak i spójne z interfejsami API dat i godzin w innych językach. Szczególnie C. I, oczywiście, po utworzeniu API nie mogli go zmienić ze względu na wsteczną kompatybilność.
źródło
Przy okazji, różne przeglądarki mogą zwracać różne wyniki, więc lepiej całkowicie pominąć tę funkcję i zawsze używać metody getFullYear ().
źródło
var date_object = new Date (); var rok = date_object.getYear (); if (rok <2000) {rok = rok + 1900; } // dostaniesz cały rok ....
źródło
powraca czterocyfrowy rok - 1900, który być może był fajny 9+ lat temu, ale teraz jest dość opóźniony. Robi to również java.util.Date w Javie.
źródło