Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Poprawne wyświetlanie dat
Forum PHP.pl > Forum > Po stronie przeglądarki
m72
Jak poprawinie zdefiniować date w javascript żeby były uwzględniane strefy czasowe.
W poniższym przykładnie data definiowana automatycznie działa poprawnie ale data utworzona "z palca" już nie.
Czemu tak się dzieje ?

http://jsfiddle.net/m72m72/7b1s5Lnd/
nospor
teraz.getTime() + offset

getTime zwraca ci czas w milisekundach, zas offset masz minutach.... czyli do bardzo duzej liczby w milisekundach, dodajesz 120 czyli zamiast dodac 120 minut dodajesz 120 milisekund, a to nie wplywa w zaden sposob na czas... choc nie, wplywa, bo zamiast sekund 14 pokazuje ci sekund 13 smile.gif
m72
Ale przecież "teraz" wyświetla się poprawnie (2 linia w konsoli),
z kolei 3,4 i 5 linia wyświetla złą godzinę.
nospor
No toz ci tlumacze.... przeczytales co napisalem?

rownie dobrze, zamias + offfset mozesz dac: +0, efekt bedzie identyczny. Twoje +offset nie ma zadnego wplywu na wynik, kapisz?

No, skoro wiec to ustalone, to teraz gdy podajesz recznie, ze jest 12, to sie nie dziw, ze ci wyswietla ze jest 12. A automatycznie ci dziala, bo on pobiera aktualną date.

edit: jesli jeszcze nie kumasz, to moze inaczej:
gdy tworzysz obiekt date, to tworzysz go w aktualnej strefie. I jesli tworzac go, mowisz, ze w aktualnej strefie jest 12, to dla niego znaczy to wlasnie tyle, ze jest 12 i nie oczekuj od niego innego wyniku.
m72
Już działa.

http://jsfiddle.net/m72m72/7b1s5Lnd/

Reasumując żeby wyświetlić poprawną datę to:
Przy definiowaniu daty jako terźniejszą chwilę nie trzeba "offsetować", czyli:
  1. var teraz = new Date(); // Jest godzina np:12:00:00
  2. console.log(teraz); //np: Date 2014-08-29T10:00:00.000Z - w dacie samoistnie odejmują się 2 godziny
  3. console.log('teraz='+teraz); //np: Date 2014-08-29T12:00:00.000Z przy wyświetlaniu daty łącznie ze stringiem nie wiem czemu ale spowrotem się dodają brakujące godziny :)


Z kolei przy definiowaniu daty "z palca" trzeba uwzględnić offset:
  1. var data = new Date(2014,08-1,29,12,00,00); // odejmujemy 1 godzinę (też nie wiem czemu ale działa)
  2. var offset_data = data.getTimezoneOffset()* 60000; // wyliczamy offset * 60000 (bo minuta to 60000 milisekund) a offset jest w minutach
  3. console.log(data); // tutaj dostajemy godzinę 10 czyli w zmiennej odjęte są 2 godziny
  4. console.log('data= '+data); // i znów przy wyświetlaniu daty łącznie ze stringiem godziny są korygowane

ps. nieźle to jest pierdzielnięte

Niech mądrzejsi odemnie to poprawią albo skomentują i będzie dla potomnych smile.gif
nospor
Widze nic nie zrozumiales z tego co napisalem...

Jak podajesz, że w danej strefie jest 12:00:00, to nic nie musisz offsetowac przy wyswietlaniu... Skoro jest 12:00:00 to jest 12:00:00 i koniec. Niby z jakiego powodu przy wyswietlaniu ma ci sie wyswietlac 14:00:00... nie rozumiesz chyba o co tu chodzi.
m72
No ale przecież teraz wszystko działa jak należy, w czym problem ?

ps. poprawny link
http://jsfiddle.net/m72m72/c854pxnj/
nospor
Dziala ci jak nalezy, bo nie offsetujesz daty. A jeszcze post wczesniej pisales, ze dla recznej daty trzeba ją offsetowac....
A ja ci od początku pisalem, ze wlasnie masz nie offsetowac. I dopiero jak nie offsetujesz to jest ok. Wiec przestan wkoncu mieszac, ze niby dla recznej trzeba offsetowac a co do czego i tak nie offsetujesz...
m72
Po kilku przeróbkach się zapultałemi faktycznie był błąd.
Czyli ani data "teraz" ani z palca nie musi być offsetowana ?

Tak wnioskuje bo to działa.

  1. var teraz = new Date();
  2. console.log(teraz);
  3. console.log('teraz='+teraz);
  4.  
  5. var data = new Date(2014,08-1,29,12,00,00);
  6. console.log(data);
  7. console.log('data= '+data);
  8.  


http://jsfiddle.net/m72m72/c854pxnj/1/
nospor
Cytat
Czyli ani data "teraz" ani z palca nie musi być offsetowana ?
No przeciez juz ci to tlumaczylem: nie, nie musi.
I w poprzednim poscie ci dzialalo, bo tez nie offsetowales, gdyz to:
var offset_data = data.getTimezoneOffset()* 60000;
nie jest offetowanie daty tylko wyciągnieciem offetu i przemnozeniem go i nic wiecej...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.