Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: data
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
kufalo
  1. <?=date('d.m.Y H:i.s',$t=time()).'<br>'?>
  2. <script>
  3.  x=new Date(<?=$t?>000)
  4.  x=x.getDate()+'.'+(x.getMonth()+1)+'.'+x.getFullYear()+' '+x.getHours()+':'+x.getMinutes()+'.'+x.getSeconds()
  5.  document.write(x)
  6. </script>


Nie wiem za bardzo skad sie bierze przesuniecie o godzine, jezeli chodzi o interpretacje tej samej liczby reprezentujacej date przez php oraz JS.

1. Czy funkcja time() zwarca znacznik aktualnego czasu GTM+0 questionmark.gif
2. Czy JS na wejsciu przyjmuje czas GTM+0, a na wyjsciu uwzglednia przesuniecie lokalnego czasu questionmark.gif
3. Jak sie ma sprawa z czasem letnim/zimowych, czy to jest w jakis sposob uwzgledniane questionmark.gif

---

Generalnie php ma zapisywac czasy dodania wiadomosci.
W chwili otwarcia strony beda one przeslane do przegladarki bez zadnej obrobki. Dopiero JS ma sie za to zabrac i wyswietlic dane przeliczone na czas lokalny.
To tak jak na forum - wyswietla sie data dodania postu - w kazdym kraju lokalna w zaleznosci od strefy czasowej.
Ja chce to osiagnac przy pomocy JS, aby php nie dokonywalo zadnych obliczen.

Jakich funcji uzyc po strone php a jakich po stronie JS zeby dzialalo to poprawnie i uwzglednialo czas letni/zimowy.
angel2953
Jeżeli testujesz skrypt na serwerze zdalnym to może to być wina stref czasowych bo patrzyłem u siebie na localu i wyświetlało dokładnie tą samą godzinę...
sobstel
- time() zwraca czas lokalny
- czas pobierany jest po prostu z serwera (w przypadku php) albo komputera uzytkownika (javasrcipt), tak wiec uwzglednianie sa DST jelsi tylko sa uwzglednione na serwerze/komputerze
- przydatna strona : http://timeanddate.com/
- dla twojego problemu proponowalbym nastepujace rozwiazanie : najpierw po stronie php uzyc funkcji gmmktime() a potem po stronie klienta wykorzystujac date.getTimezoneOffset(), ktore zwraca aktualne przesuniecie w minutach, pokazac wlasciwy czas

EDIT
- a, mozna tez prawie wszystko przerzucic do php. w js tylko ustwiac cookie z aktualnym przesunieciem (getTimezoneOffset) a potem korzystac z tego w php
sobstel
Cytat(kufalo @ 2005-11-12 12:48:09)
Cytat
time() zwraca czas lokalny
nie jestem do konca pewien, ale wydaje mi sie jednak, ze time() zwarca czas na poludniku 0...

time() nie zwraca GMT, poza sytuacjami kiedy serwer zwraca czasy w strefie GMT. mozliwe ze masz np. serwer ustawiony na GMT (nie znam dokladnie zagadnienia ustawien czasu serwera wiec nie wiem jak to dokladnie wyglada i nie wiem czy to jest mozliwe, wiec tu nie pomoge).

u mnie podobnie jak u angel2953 zwraca ten sam czas (komputer mam ustawiony na CET)
kufalo
Cytat
time() nie zwraca GMT, poza sytuacjami kiedy serwer zwraca czasy w strefie GMT. mozliwe ze masz np. serwer ustawiony na GMT (nie znam dokladnie zagadnienia ustawien czasu serwera wiec nie wiem jak to dokladnie wyglada i nie wiem czy to jest mozliwe, wiec tu nie pomoge).


No wiec moje php stoi na Windowsie z ustawiona strefa czasowa dla Warszawy GTM+1.

Po uruchomieniu skrypu w przegladarce znajdujacej sie na tym samym komputerze co serwer php otrzymuje:
Cytat
12.11.2005 12:16.30
12.11.2005 13:16.30


Jezeli zmienie strefe czasu lokalnego w windowsie na Londyńską GTM dostaje:
Cytat
12.11.2005 12:16.30
12.11.2005 12:16.30


Jak dla mnie wniosek z tego taki, ze php zwraca mi zawsze czas GTM (w Londynie) niezaleznie od tego jaka mam strefe ustawiona w systemie.
No chyba ze ta strefe sie konfiguruje gdzies w php.ini i php nie odczytuje jej z systemu questionmark.gif
sobstel
dziwna sytuacja, podziel sie prosze informacja o tym jaka wersje php masz a jaki serwer www (apache/iis) i jaka wersja questionmark.gif

EDIT: mzoesz przejrzec bugs.php.net i oczywiscie google. byc moze to znany problem
kufalo
Cytat
Apache/2.0.55 (Win32) php/5.1.0


Moze gdzies w ustawieniach Apacha lub php podajemy strefe czasowa serwera questionmark.gif

Zastanawiam sie czy jest w php jakas funkcja zwracajaca strefe czasowa serwera questionmark.gif

dokopalem sie w phpinfo() do nastepujacych ustawien mojego php:
Cytat
date/time support enabled
Default timezone UTC
date.timezone no value


tylko nie wiem za bardzo ktora to strefa UTC.
Niestety nie moge sie doszukac w pliku httpd.conf ani php.ini tych ustawien. Prawdopodobnie nie jest mozliwa konfiguracja.

sopel, mozesz podac co wyswietla Twoje phpinfo() questionmark.gif
sobstel
i juz wszystko jasne, UTC to wlasnie GMT

ja nie mam ani w phpinfo ani php.ini ustawionego date.timezone

EDIT:

z tego co wlasnie wyczytalem (http://pl.php.net/manual/en/ref.datetime.php#datetime.constants) to date.timezone jest dostepne od 5.1.0. zobacz tez to date_default_timezone_set" title="Zobacz w manualu php" target="_manual i date_default_timezone_get" title="Zobacz w manualu php" target="_manual
kufalo
Jezeli masz php 5.x powiedz mi prosze, co ci wyswietli:

  1. <?=date_default_timezone_get()?>



Teraz zagadka dla mnie jest jak napisac funkcje, aby mi php zwrocilo czas jaki panuje w Londynie. Niezaleznie na jaki serwer wrzuce skrypt nie znajac jego strefy czasowej.
sobstel
mam php 5.0.5, a to zostalo wprowadzone dopiero od 5.1

po prostu uzyj date_default_timezone_set" title="Zobacz w manualu php" target="_manual
kufalo
Cytat
time() zwraca czas lokalny

time() nie zwraca czasu lokalnego ani czasu UTC (GTM) lecz zgodnie z manualem:
Cytat
Returns the current time measured in the number of seconds since the Unix Epoch (January 1 1970 00:00:00 GMT).

liczbę sekund od 1 stycznia 1970 00:00:00 GMT (czasu londynskiego).

Znacznik ten jest na calym swiecie z danym momencie jednakowy, niezaleznie od wersji php oraz ustawien date_default_timezone_set().

Wszystko zalezy jak wykorzysta sie jego wartosc.

Funcja date() przy formatowaniu daty ze znacznika automatycznie dolicza przesuniecie czasu lokalnego. Natomiast fukcja gmdate() nie wprowadza tej korekty, czyli otrzymujemy czas UTC (GTM, londynski).

---

Zamieszanie z roznica czasow, jakie wyswietlal pierwszy moj skrypt wzielo sie stad, ze funcja php date() (jak rowniez funkcje JS: getDate(), getMonth(), getFullYear(), getHours(), getMinutes(), getSeconds()) formatuje date czasu lokalnego ze znacznika czasu.
Poniewaz w php mialem zdefiniowany czas lokalny londynski (dla funkcji date()), a w windowsie (dla JS) polski powstawala roznica 1h.

A tak to powinno wygladac, aby nie dochodzilo do roznic:
  1. <script>
  2.  x=new Date(<?=time()?>000)
  3.  x=x.getDate()+'.'+(x.getMonth()+1)+'.'+x.getFullYear()+' '+x.getHours()+':'+x.getMinutes()+'.'+x.getSeconds()
  4.  document.write(x+'<br>')
  5.  
  6.  x=new Date()
  7.  x=x.getDate()+'.'+(x.getMonth()+1)+'.'+x.getFullYear()+' '+x.getHours()+':'+x.getMinutes()+'.'+x.getSeconds()
  8.  document.write(x)
  9. </script>
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.