30 dniowy kurs php – dzień 14 – date(), mktime()


Back-end (php, mysql)

Możliwość wyświetlenia aktualnej daty jest bardzo przydatna. Załóżmy, że tworzysz serwis. Udostępniasz możliwość rejestracji i chcesz znać datę zarejestrowania każdego użytkownika. Możesz stworzyć również płatności abonamentowe. Użytkownik kupuje np. dostęp do serwisu na 31 dni po czym dostęp zostaje mu zablokowany, chyba że dokona płatności za kolejny miesiąc.

To tylko jeden z możliwych przykładów praktycznego zastosowania daty w php. Przejdźmy na początek do wyświetlenia daty funkcją echo

<?php

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

?>

Jak widzisz litery w funkcji date() symbolizują konkretne dane czasowe. Separatory mogą być dowolne, możesz wpisać myślnik, dwukropek, ukośnik, przecinek, kropkę etc. Możesz w ogóle nie wpisać separatora wtedy data zostanie wyświetlona jako zlepek.

Aktualna strefa czasowa

Poprzedni przykład wyświetli aktualną datę, zależną od serwera na którym aktualnie funkcja jest wykonywana. Jeśli jesteś w Australii wyświetli Ci się Twój aktualny czas, podobnie jak w przypadku gdy jesteś w Polsce. Będą to jednak 2 kompletnie różne godziny. Możemy jednak zdefiniować aktualną strefę czasową. W tym celu użyjemy funkcji date_default_timezone_set(). W nawiasie w cudzysłowu podajemy żądaną strefę czasową. Lista obsługiwanych stref czasowych dostępna jest w dokumentacji php.

<?php

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

date_default_timezone_set('America/New_York');
echo 'Czas New York ' . date('H:i:s') . '<br/>';

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

?>

W ten sposób możemy wyświetlić aktualną godzinę dla konkretnej strefy czasowej.

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

date()+mktime()

Przy pomocy mktime możemy wyświelić dowolną datę w czasie uniksowym. By jednak zamienić ciąg sekund liczonych od 1970 roku roku UTC zastosujemy funkcję date. Dzięki temu zwrócona zostanie konkretna data lub godzina. Chcemy np. dowiedzieć się w jaki dzień tygodnia wybuchła II wojna światowa.

<?php

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

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

?>

Litera l (małe L) symbolizuje pełną nazwę dnia tygodnia podawaną w języku angielskim. Wiemy więc, że 1 września 1939 był Piątek.

WAŻNE: zauważ, że data w mktime() podawana jest w formacie miesiąc, dzień, rok. Jest to standard zapisywania daty obowiązujący w USA. W Polsce datę zapisujemy w formacie dzień, miesiąc, rok. Łatwo więc o pomyłkę i powinieneś na to uważać.

Formaty dat i czasu

Jak już zauważyłeś data wyświetlana przy pomocy date() zależy od liter znajdujących się w nawiasie funkcji. Każda litera symbolizuje konkretne dane, które następnie są zwracane w postaci dnia tygodnia, roku czy godziny.

Poniżej znajdziesz tabelę liter wpisywanych jako format daty.

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 kończąc na Sun
j Dzień miesiąca bez zer wiodących 1 do 31
l (małe L) Pełen angielski opis dnia tygodnia Sunday aż do Saturday
N Liczbowa forma dnia tygodnia, zgodna z normą ISO-8601 (dodana
w PHP 5.1.0)
1 (dla Poniedziałku) aż do 7 (dla Niedzieli)
S Angielski przyrostek porządkowy dla dnia miesiąca, 2 litery st, nd, rd lub
th. Dobrze wygląda w połączeniu z j
w Liczbowa forma dnia tygodnia 0 (dla Niedzieli) aż do 6 (dla Soboty)
z Dzień roku (Zaczynając od 0) 0 aż do 365
Tydzień
W Numer tygodnia w roku, zgodny z normą ISO-8601, Tygodnie rozpoczynają Poniedziałki (dostępne od PHP 4.1.0) Przykład: 42 (42. tydzień roku)
Miesiąc
F Pełen angielski opis, dnia miesiąca, taki jak January czy March January aż do December
m Liczbowa forma miesiąca, z zerami wiodącymi 01 aż do 12
M Krótki, angielski opis miesiąca, trzy litery Jan a do Dec
n Liczbowa forma miesiąca, bez zer wiodących 1 aż do 12
t Ilość dni w danym miesiącu 28 do 31
Rok
L Informacja o tym, czy rok jest przestępnym 1 jeśli rok jest przestępny, 0 w przeciwnym wypadku.
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 2003
Y Pełna liczbowa forma roku, 4 cyfry Przykłady: 1999 lub 2003
y Dwie cyfry reprezentujące rok Przykłady: 99 or 03
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 aż do 999
g Godzina, w formacie 12-godzinnym, bez zer wiodących 1 aż do 12
G Godzina, w formacie 24-godzinnym, bez zer wiodących 0 aż do 23
h Godzina, w formacie 12-godzinnym, z zerami wiodącymi 01 aż do 12
H Godzina, w formacie 24-godzinnym, z zerami wiodącymi 00 through 23
i Minuty z zerami wiodącymi 00 do 59
s Sekundy, z zerami wiodącymi 00 aż do 59
u Mikrosekundy (dodano w PHP 5.2.2) Przykład: 54321
Strefa czasowa
e Identyfikator strefy czasowej (dodano w PHP 5.1.0) Przykłady: UTC, GMT, Europe/Zagreb
I (duże i) Informacja o tym, czy czas jest letni 1 jeśli czas jest letni, 0 w przeciwnym razie.
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 (dodano w PHP 5.1.3) 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 aż do 50400
Pełna Data/Czas
c Data w standardzie ISO 8601 (dodana w PHP 5) 2004-02-12T15:19:21+00:00
r Data sformatowana zgodnie z » RFC 2822 Przykład: Thu, 21 Dec 2000 16:01:07 +0200
U Sekundy liczone od ery UNIX-a (1 stycznia 1970 00:00:00 czasu Greenwich – GMT) Zobacz także time()

Źródło tabeli: dokumentacja php.