PHP – wyświetlanie daty – funkcje date(), mktime()

Wyświetlanie aktualnej daty w PHP w wielu przypadkach jest po prostu niezbędne. Rozważmy przykład.

Tworzysz serwis www z możliwością rejestracji użytkowników. Na pewno będziesz chciał poznać datę zarejestrowania każdego z użytkowników. Albo tworzysz płatności abonamentowe, użytkownik musi wykupić dostęp do serwisu na dany okres czasu, po którym dostęp zostanie zablokowany, chyba że dokona płatności za kolejny okres.

Najprostszy sposób wyświetlania daty to skorzystanie z funkcji date oraz echo:

<?php

echo date('y-m-d').'<br>'; // rok(2 ostatnie cyfry)-miesiąc-dzień
echo date('H:i:s').'<br>'; // godzina(w formacie 24 godzinnym):minuta:sekunda

Jak to wyraźnie widać, litery w funkcji date() symbolizują konkretne dane czasowe. Separatory, które je oddzielają mogą być dowolne, (np. może to być myślnik, dwukropek, ukośnik, przecinek, kropka, itd). Możesz także nie wpisać żadnego separatora.

Aktualna strefa czasowa użytkownika

Powyższy przykład wyświetli datę lub godzinę serwera, na którym umieszczona jest strona www. Jeśli korzystasz z hostingu od zagranicznego operatora czas na serwerze może być inny niż ten w Twoim kraju. Na szczęście możemy zdefiniować aktualną strefę czasową. Służy do tego funkcja date_default_timezone_set() W nawiasie w cudzysłowie podajemy żądaną strefę czasową. Lista obsługiwanych stref czasowych dostępna jest w dokumentacji php.

Poniżej przykład wykorzystania:

<?php

date_default_timezone_set('Europe/Warsaw');
echo 'Czas Warszawa ' . date('H:i:s') . '<br>';

date_default_timezone_set('America/Puerto_Rico');
echo 'Czas Puerto Rico ' . date('H:i:s') . '<br>';

date_default_timezone_set('Australia/Sydney');
echo 'Czas Sydney' . date('H:i:s') . '<br>';

W taki sposób możemy wyświetlić właściwą, aktualną godzinę dla danej strefy czasowej.

A co zrobić w przypadku gdy chcemy wyświetlić konkretną datę z przeszłości bądź przyszłości?

Konkretna data

Funkcje date()+mktime()

Przy pomocy funkcji mktime() możemy wyświetlić dowolną datę w tzw. czasie uniksowym. Czas uniksowy to liczba sekund jakie upłynęły od 1 stycznia 1970 roku czasu UTC. By jednak zamienić ten ciąg sekund na konkretną datę wykorzystamy poznaną wcześniej date(). Dzięki takiemu zabiegowi zostanie zwrócona nam konkretna data lub godzina. Jeśli chcemy np. dowiedzieć się w jaki dzień tygodnia wybuchła II wojna światowa możemy wykorzystać poniższy przykład:

<?php

echo date('l',mktime(0, 0, 0, 9, 1, 1939)); // wyświetli Friday czyli piątek

// mktime(godzina,minuta,sekunda,miesiąc,dzień,rok)

Litera l (czyli małe L) symbolizuje pełną nazwę dnia tygodnia podawaną w języku angielskim.

Zauważ, że data w mktime() podawana jest w formacie: miesiąc, dzień, rok. Jest to standard zapisywania daty, który obowiązuje w USA. W Polsce jak i w wielu innych krajach datę zapisujemy w formacie: dzień, miesiąc, rok (na odwrót dzień i miesiąc).

Formaty dat i czasu

Jak to zostało powyżej pokazane, data wyświetlana przy pomocy funkcji date() zależy od liter znajdujących się w nawiasie funkcji. Każda litera symbolizuje konkretne dane czasowe, które następnie są zwracane w postaci np. numeru miesiąca, roku czy godziny.

Poniżej znajduje się tabela liter, które możesz wykorzystać w funkcji date().

Parametr

Opis

Przykład

Dzień
d Dzień miesiąca, 2 cyfry z wiodącymi zerami 01 do 31
D Tekstowy opis angielskiej nazwy dnia, trzy litery Mon – Sun
j Dzień miesiąca bez zer wiodących 1 do 31
l (małe L) Pełen angielski opis dnia tygodnia Sunday – Saturday
N Liczbowa forma dnia tygodnia, zgodna z normą ISO-8601 (dodana
w PHP 5.1.0)
1 (dla Poniedziałku) – 7 (dla Niedzieli)
S Angielski przyrostek porządkowy dla dnia miesiąca, 2 litery st, nd, rd, th
w Liczbowa forma dnia tygodnia 0 (dla Niedzieli) – 6 (dla Soboty)
z Dzień roku (Zaczynając od 0) 0 – 365
Tydzień
W Numer tygodnia w roku, zgodny z normą ISO-8601, Tygodnie rozpoczynają Poniedziałki Przykład: 42 (42. tydzień roku)
Miesiąc
F Pełen angielski opis, dnia miesiąca, taki jak January czy March January – December
m Liczbowa forma miesiąca, z zerami wiodącymi 01 – 12
M Krótki, angielski opis miesiąca, trzy litery Jan -Dec
n Liczbowa forma miesiąca, bez zer wiodących 1 – 12
t Ilość dni w danym miesiącu 28 – 31
Rok
L Informacja o tym, czy rok jest przestępnym 1 jeśli rok jest przestępny, 0 gdy jest nieprzestępny
o Numer roku, zgodny z normą ISO-8601. Zwraca to taką samą wartość jak
Y, z takim wyjątkiem, że numer tygodnia ISO
(W) należy do poprzedniego lub następnego roku, niż rok
użyty w tym miejscu. (dodane w PHP 5.1.0)
Przykłady: 1999 lub 2016
Y Pełna liczbowa forma roku, 4 cyfry Przykłady: 1999 lub 2016
y Dwie cyfry reprezentujące rok Przykłady: 99 lub 16
Czas
a Pora dnia – dwie małe litery (przed/po południu) (ang. Ante/Post meridiem) am lub pm
A Pora dnia – dwie duże litery (przed/po południu) (ang. Ante/Post meridiem) AM lub PM
B Swatch Internet Time 000 – 999
g Godzina, w formacie 12-godzinnym, bez zer wiodących 1 – 12
G Godzina, w formacie 24-godzinnym, bez zer wiodących 0 – 23
h Godzina, w formacie 12-godzinnym, z zerami wiodącymi 01 – 12
H Godzina, w formacie 24-godzinnym, z zerami wiodącymi 00 -23
i Minuty z zerami wiodącymi 00 -59
s Sekundy, z zerami wiodącymi 00 – 59
u Mikrosekundy Przykład: 543321
Strefa czasowa
e Identyfikator strefy czasowej Przykłady: UTC, GMT, Europe/Zagreb
I (duże i) Informacja o tym, czy czas jest letni 1 jeśli czas jest letni, 0 gdy zimowy (standardowy)
O Różnica z czasem Greenwich (GMT) w godzinach Przykład: +0200
P Różnica z czasem Greenwich (GMT) z dwukropkiem pomiędzy godzinami i minutami Przykład: +02:00
T Skrót dla strefy czasowej Przykłady: EST, MDT …
Z Różnica dla strefy czasowej w sekundach. Wyrównanie to jest zawsze ujemne dla stref położonych na zachód
od południka 0, oraz dodatnie dla tych leżących na wschódod niego.
-43200 – 50400
Pełna data i czas
c Data w standardzie ISO 8601 np 2016-02-12T15:19:21+00:00
r Data sformatowana zgodnie z RFC 2822 Przykład: Thu, 21 Dec 2016 16:01:07 +0200
U Sekundy liczone od ery UNIX-a (1 stycznia 1970 00:00:00 czasu Greenwich – GMT)

Źródło tabeli: dokumentacja PHP.

Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Więcej informacji

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close