Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Poprawne wyświetlanie dat
m72
post 29.08.2014, 13:00:49
Post #1





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 25.12.2012

Ostrzeżenie: (0%)
-----


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/
Go to the top of the page
+Quote Post
nospor
post 29.08.2014, 13:20:13
Post #2





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
m72
post 29.08.2014, 14:37:04
Post #3





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 25.12.2012

Ostrzeżenie: (0%)
-----


Ale przecież "teraz" wyświetla się poprawnie (2 linia w konsoli),
z kolei 3,4 i 5 linia wyświetla złą godzinę.
Go to the top of the page
+Quote Post
nospor
post 29.08.2014, 14:42:22
Post #4





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
m72
post 29.08.2014, 16:37:41
Post #5





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 25.12.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował m72 29.08.2014, 16:38:30
Go to the top of the page
+Quote Post
nospor
post 29.08.2014, 16:58:53
Post #6





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
m72
post 29.08.2014, 17:22:26
Post #7





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 25.12.2012

Ostrzeżenie: (0%)
-----


No ale przecież teraz wszystko działa jak należy, w czym problem ?

ps. poprawny link
http://jsfiddle.net/m72m72/c854pxnj/

Ten post edytował m72 29.08.2014, 17:26:44
Go to the top of the page
+Quote Post
nospor
post 29.08.2014, 17:35:49
Post #8





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
m72
post 29.08.2014, 17:52:07
Post #9





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 25.12.2012

Ostrzeżenie: (0%)
-----


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/
Go to the top of the page
+Quote Post
nospor
post 29.08.2014, 18:02:44
Post #10





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




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...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 06:52