EpicWEB.pl

webdesign, programowanie, phat lewt!

Ostatni projekt

ddrpl.com

Ostatnie wiadomości

Opera - problem z obiektem klasy Date

Obiekt klasy Date w Java Script pozwala na poznanie / ustawienie i ogólne manipulowanie datami - dzięki niemu możemy na stronę wstawić zegarek czy zbudować kalendarz w samym JS. Klasa udostępnia wiele metod, mnie w tym momencie najbardziej interesują setMonth i setDate. Poniższy kod:

var d=new Date();
d.setMonth(3);
d.setYear(2010);
alert(d);       

zwróci nam datę - pierwszy kwietnia 2010, z aktualną godziną. Znaczy, zwrócił by o ile nie używasz Opery. Opera (10.51) uparcie twierdzi, że taka data to pierwszy stycznia. Dlaczego?

Niestety nie mogę doszukać się tego w żadnej specyfikacji - może ktoś znajdzie i przekona mnie, że tak powinno to działać - ale w przypadku Opery zdefiniowanie roku resetuje wcześniejsze zdefiniowanie miesiąca. By obejść "błąd" należy zacząć definicje od "najstarszej" informacji - czyli odpowiednio setYear(); setMonth(); setDate();

Komentarze

Avatar użytkownika 1

Komentarz użytkownika jam łasica

14 04 2010

setFullYear powinno działać...

Avatar użytkownika 2

Komentarz użytkownika BTM

14 04 2010

W rzeczy samej działa poprawnie. Co nie zmienia faktu, że w innych przeglądarkach zapis z setDate działa poprawnie zaś w Operze szaleje. Zakładam, że miało to usprawnić rozróżnianie 2010 i 1910. Wpis i tak pozostaje, dla potomnych grzebiących w starych skryptach ;-)

3

Komentarz użytkownika zeus

14 04 2010

W specyfikacji pod adresem http://www.w3schools.com/jsref/jsrefobjdate.asp wyraźnie jest zaznaczone że należy używać setFullYear()

Avatar użytkownika 4

Komentarz użytkownika BTM

14 04 2010

Taaak, jest, ale nie jest napisane dlaczego. Poza tym, jest to rozwiązanie nowsze niż część skryptów, które w innych przeglądarkach (i starszych Operach) działają poprawnie.

5

Komentarz użytkownika Arni

14 04 2010

No cóż, widocznie Opera na siłe stara się dążyć do standardu, nawet kosztem utracenia wstecznej kompatybilności. Może to i brutalne, ale dobre.

Avatar użytkownika 6

Komentarz użytkownika pecet

14 04 2010

Arni -- nie tylko do kompatybilności co do debilności, no ale fanboje Opery tego nie rozumieją ;)

7

Komentarz użytkownika Arni

14 04 2010

@pecet, myślałem że cała sprawa IE pokazała wszystkim dość dobrze, co się dzieje kiedy producent sam sobie wyznacza standardy... widać nie do końca.
Naprawde lepiej będzie, jeśli wszyscy zaczną się trzymać W3C.

Btw, domyślam się o co Ci chodzi, ale zamieniając "kompatybilności" na "debilności" w mojej wypowiedzi, skonstruowałbyś dość dziwaczną... "wsteczną debilność". ;)

Avatar użytkownika 8

Komentarz użytkownika mina86

14 04 2010

Zgłoś błąd i nie marudź.

9

Komentarz użytkownika Piotrek Reinmar Koszuliński

14 04 2010

A ja nie wiem nad czym się głowicie. Nie ma setYear w specyfikacji, więc może sobie działać jak chce. Nie ma podstaw by uznawać to za błąd.

https://developer.mozilla.org/index.php?title=Pl/Dokumentacjaj%C4%99zykaJavaScript_1.5/Obiekty/Date/SetYear
Było w JS 1.0
Nie ma w JS 1.3

Avatar użytkownika 10

Komentarz użytkownika mina86

14 04 2010

Jest błąd, bo w 10.10 działa inaczej.

11

Komentarz użytkownika Piotrek Reinmar Koszuliński

14 04 2010

A w mojej przeglądarce działa jeszcze inaczej, więc w ogóle wszystkie przeglądarki się mylą. Nie ma standardu, nie ma błędu.

Avatar użytkownika 12

Komentarz użytkownika mina86

15 04 2010

Nie twierdzę, że jest błąd względem standardu -- twierdze, że jest nieuzasadniona nieciągłość względem wersji przeglądarki. Zresztą moim zdaniem ten kod powinien generować kwiecień 3910.

Avatar użytkownika 13

Komentarz użytkownika BTM

15 04 2010

@Piotrek: i tu się mylisz. Nie ma w JS 1.5, ale jest w JS 1.4, zostało oznaczone jako przestarzałe w JS1.3, co nie oznacza, że duża część starych skryptów / FAQ wciąż wskazuje jako właściwą. I wg. specyfikacji jest opisana jako:

setYear(yearValue)
If yearValue is a number between 0 and 99 (inclusive), then the year for dateObjectName is set to 1900 + yearValue. Otherwise, the year for dateObjectName is set to yearValue.

Co jak widać Opera sobie radośnie zignorowała, przez co kompatybilność wsteczna kuleje.

Avatar użytkownika 14

Komentarz użytkownika BTM

15 04 2010

Damn, nawet w JS 1.5 wciąż jest.

Zostaw komentarz