Blog webdeveloperski Patryk yarpo Jar

Obsluga daty i czasu w PHP: funkcja `date`

Autor wiadomości Październik 27, 2014

W PHP znalezc mozemy kilka sposobow obslugi daty i czasu. W tym wpisie chcialbym skupic sie na funkcji `date`. Planuje glownie skupic sie na tym, ze nie do konca dziala tak jakby nalezalo sie tego spodziewac. Choc trzeba przyznac, ze w ostatnim czasie (kolejne wersje PHP) troche sie polepszylo.

Funkcja `date`

Aby stworzyc ciag znakow reprezentujacy date z czasem nalezy wykonac taki kod:

echo date('d M y H:i:s');

Taki kod wyswietlil mi:

06 Oct 14 00:26:57

Choc oczywiscie byla to aktualna data z czasem. Istnieje wiele innych mozliwych formatow. Jesli chcialbys sie o nich dowiedziec, zachecam do zapoznania sie z manualem PHP.

Tworzenie daty i czasu dla wyznaczonego momentu

Aby stworzyc date z czasem (ang. datetime, "datoczas" ;)) z okreslonego timestampa nalezy przekazac drugi parametr:

echo date('d M y H:i:s', time());

Co utworzy takze aktualna date z czasem (zgodnie z podanym formatem). Funkcja `time` zwraca aktualny timestamp.

Mozna zatem wywolac takze:

echo date('d M y H:i:s', 234234);

Tym razem kazdy powinien otrzymac:

03 Jan 70 18:03:54

Gdy chcesz stworzyc date dla dokladnie okreslonego dnia (a nie znasz timestampa) mozesz uzyctakiego kodu:

echo date('d M y H:i:s', mktime(0, 0, 0, 4, 5, 1987));

Co zwroci "05 Apr 87 00:00:00". Oczywiscie pierwsze trzy parametry to godzina, minuta, sekunda. Jednak 4 argument to juz nie dzien, a miesiac. Co dla Europejczyka jest nienaturalne (format typowo amerykanski). Wiecej o `mktime` na stronach dokumentacji PHP.

Stare i aktualne problemy

  • Zgodnie z manualem aktualnie funkcja `date` (od wersji 5.1) wspiera przedzial dat od Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. Wartosci te koresponduja z max i min wartoscia 32-bitowego inta (pamietajac, ze timestamp jest liczba).
    Wczesniej byl to przedzial 01-01-1970 to 19-01-2038. Zatem nie mozna bylo polegac na tej funkcji nawet dla wyswietlania daty urodzin(!). Dzisiaj nadal mimo wszystko jest to dosyc ograniczony zakres.
  • Jak mozna zauwazyc w powyzszych przykladach, drugi argument nie jest wymagany. Jesli jednak przekazemy `null` uzyskujemy 1 sty 1970, a nie jak (czasem PHP sie zachowuje - tu bedzie link do wpisu o `\DateTime`) ja bym oczekiwal - aktualna date i czas. Sadze, ze wynika to z tego, ze `null` jest automatycznie konwertowany do integera (czyli przyjmuje wartosc `0`).
  • Operujesz na stringu. Nie masz dostepu do jakiegos obiektu / struktury. Troche to jednak ubogie, nie prawda?

Podsumowanie

Jest to pierwszy z planowanej serii artykulow o obsludze daty i czasu w PHP. Wydawaloby sie to dosyc latwe, jednak okazuje sie, ze mozna znalezc tu bardzo wiele niespodzianek 😉

Czytaj wiecej

Komentarze (0) Trackbacks (1)

Leave a comment