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ń
dDzień miesiąca, 2 cyfry z wiodącymi zerami01 do 31
DTekstowy opis angielskiej nazwy dnia, trzy literyMon – Sun
jDzień miesiąca bez zer wiodących1 do 31
l (małe L)Pełen angielski opis dnia tygodniaSunday – Saturday
NLiczbowa forma dnia tygodnia, zgodna z normą ISO-8601 (dodana
w PHP 5.1.0)
1 (dla Poniedziałku) – 7 (dla Niedzieli)
SAngielski przyrostek porządkowy dla dnia miesiąca, 2 literyst, nd, rd, th
wLiczbowa forma dnia tygodnia0 (dla Niedzieli) – 6 (dla Soboty)
zDzień roku (Zaczynając od 0)0 – 365
Tydzień
WNumer tygodnia w roku, zgodny z normą ISO-8601, Tygodnie rozpoczynają PoniedziałkiPrzykład: 42 (42. tydzień roku)
Miesiąc
FPełen angielski opis, dnia miesiąca, taki jak January czy MarchJanuary – December
mLiczbowa forma miesiąca, z zerami wiodącymi01 – 12
MKrótki, angielski opis miesiąca, trzy literyJan -Dec
nLiczbowa forma miesiąca, bez zer wiodących1 – 12
tIlość dni w danym miesiącu28 – 31
Rok
LInformacja o tym, czy rok jest przestępnym1 jeśli rok jest przestępny, 0 gdy jest nieprzestępny
oNumer 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
YPełna liczbowa forma roku, 4 cyfryPrzykłady: 1999 lub 2016
yDwie cyfry reprezentujące rokPrzykłady: 99 lub 16
Czas
aPora dnia – dwie małe litery (przed/po południu) (ang. Ante/Post meridiem)am lub pm
APora dnia – dwie duże litery (przed/po południu) (ang. Ante/Post meridiem)AM lub PM
BSwatch Internet Time000 – 999
gGodzina, w formacie 12-godzinnym, bez zer wiodących1 – 12
GGodzina, w formacie 24-godzinnym, bez zer wiodących0 – 23
hGodzina, w formacie 12-godzinnym, z zerami wiodącymi01 – 12
HGodzina, w formacie 24-godzinnym, z zerami wiodącymi00 -23
iMinuty z zerami wiodącymi00 -59
sSekundy, z zerami wiodącymi00 – 59
uMikrosekundyPrzykład: 543321
Strefa czasowa
eIdentyfikator strefy czasowejPrzykłady: UTC, GMT, Europe/Zagreb
I (duże i)Informacja o tym, czy czas jest letni1 jeśli czas jest letni, 0 gdy zimowy (standardowy)
ORóżnica z czasem Greenwich (GMT) w godzinachPrzykład: +0200
PRóżnica z czasem Greenwich (GMT) z dwukropkiem pomiędzy godzinami i minutamiPrzykład: +02:00
TSkrót dla strefy czasowejPrzykłady: EST, MDT …
ZRóż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
cData w standardzie ISO 8601np 2016-02-12T15:19:21+00:00
rData sformatowana zgodnie z RFC 2822Przykład: Thu, 21 Dec 2016 16:01:07 +0200
USekundy 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