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.