Webcity.pl


  Bazy danych SQLite w...

  Stosy w PHP i ich wy...

  Instalacja bazy dany...

  Zdalna obsługa kompu...

  Serwer WAP i dynamic...

 

 02.02.06 - [new] E-video - artykuł

 30.01.06 - [update] Artykuł o sesjach

 18.12.05 - [update] PDO - artykuł

 19.08.05 - [new+upd] Aktualizacja materia...

 26.04.05 - [update] Nowy artykuł



  Pomocy WML
[php]Sesje nie działają, ...
[actionscript 2.0] [flash...
Problem z talicami w php
[ocena] llll.pl darmowe a...
Kamera na stronie interne...
Kamera na stronie interne...
[xml] Jak wyciągnąć dane
Wizualizacja w JS - POMOC
Web Developer - stała / f...

... i wiele innych wątków na forum ›

Partnerzy
› allRSS.info - katalog zasobów RSS
› iloveflyer.org - webdesign
› webserv.pl - serverpack
› skryptoteka.pl - mnóstwo skryptów
› vel.pl - hosting
› TelePraca.net - pracuj swobodnie
› PHP Solutions - magazyn PHP
› HELION - wydawnictwo informatyczne

Ksišżka dnia

CityMag
Wpisz swój e-mail, aby zaprenumerować nasz Magazyn, który zawiera najnowsze informacje ze świata i najciekawsze teksty.
 

Szukasz czegoś?
Nasza wyszukiwarka znajdzie wszystko, czego szukasz.
 

Szukanie zawansowane


  Reklama
  Redakcja
  Hosting
  Kanał

© WebCity.pl Team
 
 
  Forum Forum
Kursy Kursy
Porady Porady
Recenzje Recenzje
Newsy Newsy
Katalog stron WWW Katalog
Skrypty PHP Skrypty
Download Oferty i praca
Artykuły:
 Teoria
 Praktyka
 Promocja
 Inne
 

 Webcity.pl |

Obsługa stref czasowych w PHP

Autor: Zyx
   Strefy czasowe są ważnym elementem personalizacji serwisów międzynarodowych. Dzięki ich obsłudze goście z różnych krajów będą mogli zobaczyć czasy dodania/zmiany itd. rozmaitych elementów w godzinach, jakie panują właśnie u nich. Wbrew pozorom napisanie ich implementacji nie jest wcale trudne - wystarczy tylko pomysł. Jaki? O tym jest ten tekst...
   Zazwyczaj daty różnych zdarzeń w serwis|serwisie przechowywane są po prostu jako liczba sekund od 1.1.1970. Wartość taką można pobrać przy pomocy funkcji time() lub (w przypadku zapytań SQL) UNIX_TIMESTAMP(). Format jest to dość wygodny, gdyż umożliwia nam szybkie sformatowanie późniejszej daty według naszych kryteriów. Jednak można to także wykonać w zapytaniach, w dodatku na danych w "oficjalnym" typie zapisu daty: DATE. Ale gdy do akcji wejdą strefy czasowe, korzystniej jest wykorzystać pierwszy opisany tu sposób. Dlaczego?
   Jedna godzina to 3600 sekund. Stref czasowych mamy natomiast 33 (wliczając w to strefy czasu lokalnego). Każdą z tych stref określa pewien współczynnik opisujący, o ile godzin przesuwany jest czas w stosunku do czasu GMT. Przykładowo dla naszej strefy wynosi on "+1" zimą i "+2" latem. Na Nowej Fundlandii w Kanadzie ma on natomiast wartość "-3.5". Cała sztuczka polega na tym, by napisać własny zamiennik dla funkcji date(), który wprowadzony czas przepuści dodatkowo przez takie obliczenie:

$czas + 3600 * $wspolczynnik_strefy

Gdy połączymy to z funkcją gmdate(), która wprowadzony czas traktuje jako czas na strefie GMT (czyli centralnej), otrzymamy w pełni działający filtr pokazujący datę w takiej strefie czasowej, w jakiej zażyczył sobie użytkownik. Oto przykładowy kod w PHP:

<html>
<head>
<title>Strefy czasowe</title>
</head>
<body>
Wybierz swoja strefe czasowa:
<form method="post" action="strefa.php">
<select name="tz">
<option value="-12">GMT - 12 Hours</option>
<option value="-11">GMT - 11 Hours</option>
<option value="-10">GMT - 10 Hours</option>
<option value="-9">GMT - 9 Hours</option>
<option value="-8">GMT - 8 Hours</option>
<option value="-7">GMT - 7 Hours</option>
<option value="-6">GMT - 6 Hours</option>
<option value="-5">GMT - 5 Hours</option>
<option value="-4">GMT - 4 Hours</option>
<option value="-3.5">GMT - 3.5 Hours</option>
<option value="-3">GMT - 3 Hours</option>
<option value="-2.5">GMT - 2.5 Hours</option>
<option value="-2">GMT - 2 Hours</option>
<option value="-1">GMT - 1 Hours</option>
<option value="0">GMT</option>
<option value="1">GMT + 1 Hour</option>
<option value="2">GMT + 2 Hours</option>
<option value="3">GMT + 3 Hours</option>
<option value="3.5">GMT + 3.5 Hours</option>
<option value="4">GMT + 4 Hours</option>
<option value="4.5">GMT + 4.5 Hours</option>
<option value="5">GMT + 5 Hours</option>
<option value="5.5">GMT + 5.5 Hours</option>
<option value="6">GMT + 6 Hours</option>
<option value="6.5">GMT + 6.5 Hours</option>
<option value="7">GMT + 7 Hours</option>
<option value="8">GMT + 8 Hours</option>
<option value="9">GMT + 9 Hours</option>
<option value="9.5">GMT + 9.5 Hours</option>
<option value="10">GMT + 10 Hours</option>
<option value="10.5">GMT + 10.5 Hours</option>
<option value="11">GMT + 11 Hours</option>
<option value="12">GMT + 12 Hours</option>
</select>
<input type="submit" value="OK"/>
</form>
<?php

   if(isset($_POST['tz'])){
      $strefa_czasowa = $_POST['tz'];

      function my_date($format, $time = 0){
         global $strefa_czasowa;
         if($my_time == 0){
            $my_time = time();
         }
         return gmdate($format, $my_time + 3600 * $strefa_czasowa);
      } // end my_date();

      echo 'Czas w strefie '.$_POST['tz'].': <b>'.my_date('d.m.Y, H:i').'</b>';
   }
?>
</body>
</html>

Nie bój się modyfikować tego kodu. Pamiętaj, że nie zaleca się przepisywać jednej zmiennej do drugiej bez potrzeby. Powyżej natomiast zrobiłem to ($strefa_czasowa = $_POST['tz']) tylko, by pokazać, co trzeba wstawić do obliczeć i oddzielić to od tego, skąd to wziąłem. Pamiętaj o tym.
   W serwisie ustawienie strefy czasowej powinno wyglądać mniej więcej tak: jeżeli jest ktoś zalogowany, pobierz z jego profilu informacje o strefie czasowej i zapisz gdzieś. W przeciwnym wypadku załaduj domyślną strefę czasową.
   Ten niezwykle krótki, jak na mnie, artykuł dobiega końca. Mam nadzieję, iż wyjaśniłem dokładnie tajniki związane z obsługą stref czasowych w twoich skryptach.

Powrót