Funkcje daty i czasu
Pełną listę funkcji znajdziecie w dokumentacji PHP, poniżej najczęściej wykorzystywane.
time()
Zwraca aktualny uniksowy znacznik czasu
int time(void)
Zwraca aktualny czas, podawany jako liczba sekund, które upłynęły od nastania Ery Unixu: 1 stycznia 1970, 0:00:00 GMT.
$teraz = time(); $następnyTydzien = time() + (7 * 24 * 60 * 60); // 7 dni; 24 godziny; 60 minut; 60 sekund
date()
Formatuje lokalny czas/datę.
string date ( string $format [, int $timestamp = time() ] )
Jako $format podajemy odpowiedni schemat zapisu z tabeli poniżej, a $timestamp to znacznik czasowy – nie musimy go podawać, jest ustawiany automatycznie (jest to ilość sekund od nastania Ery Unixu: 1 stycznia 1970, 0:00:00 GMT).
Przykład:
echo date("l"); // wyświetli Monday echo date("m.d.y"); // wyświetli 03.10.01 echo date("j, n, Y"); // wyświetli 10, 3, 2001 echo date('l jS \of F Y h:i:s A'); // wyświetli Monday 8th of August 2005 03:12:46 PM echo date('Y-m-d', time()+(7*24*60*60)); //wyświetli datę za tydzień (7*24*60*60=604800 tyle sekund ma tydzień)
date() zwraca datę sformatowaną zgodnie z szablonem przedstawionym w poniższej tabeli.
Poniższych znaków używa się jako tekstu w parametrze format
Zawartość parametru format | Opis | Przykład zwróconej wartości |
---|---|---|
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ła litera '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 |
v | Milisekundy (dodano w PHP 7.0.0). | Przykład: 654 |
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() |
getdate()
Pobiera informację o dacie/czasie
array getdate ([ int $timestamp = time() ] )
Funkcja zwraca tablicę asocjacyjną, a $timestamp to znacznik czasowy – nie musimy go podawać, jest ustawiany automatycznie (jest to ilość sekund od nastania Ery Unixu: 1 stycznia 1970, 0:00:00 GMT).
Przykład:
$dzisiaj = getdate(); print_r($dzisiaj);
Zostanie wyświetlone:
Array ( [seconds] => 40 [minutes] => 58 [hours] => 21 [mday] => 17 [wday] => 2 [mon] => 6 [year] => 2003 [yday] => 167 [weekday] => Tuesday [month] => June [0] => 1055901520 )
microtime()
Zwraca aktualny uniksowy znacznik czasu z mikrosekundami
string microtime(void)
Zwraca łańcuch znaków „msec sec”, gdzie sec jest aktualnym czasem, mierzonym jako liczba sekund od uniksowej Epoki (1 stycznia 1970, 0:00:00 GMT), natomiast msec jest aktualną liczbą mikrosekund. Funkcja ta dostępna jest wyłącznie na systemach operacyjnych, które obsługują wywołanie systemowe gettimeofday().
Obydwie części łańcucha znaków są podawane w sekundach.
$time_start = microtime(true); usleep(100); //zawiesza wykonanie skryptu na czas wyrażony w mikrosekundach $time_end = microtime(true); $time = $time_end - $time_start; echo "Nie robiłeś nic przez $time sekund\n";
mktime()
Zwraca uniksowy znacznik czasu dla konkretnej daty
int mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] )
Zwraca liczbę sekund, które upłynęły od nastania Ery Unixu: 1 stycznia 1970, 0:00:00 GMT do podanej daty. Należy zwrócić uwagę na kolejność podawanych parametrów!
Poprawna kolejność parametrów to: godziny, minuty, sekundy, miesiąc, dzień, rok.
Aby wyświetlić np dzień tygodnia, w którym się urodziliście wystarczy dostosować poniższy kod
echo "Urodziłem się w ".date("l", mktime(0,0,0,7,15,2000));
strtotime()
Parsuje większość angielskich tekstowych opisów daty i czasu do uniksowego znacznika czasu
int strtotime ( string $czas [, int $teraz ] )
Funkcja przyjmuje tekst zawierający datę w formacie angielskim i stara się przeliczyć ją na uniksowy znacznik czasu, zachowuje się zgodnie ze składnią daty wg GNU. W przypadku fiaska, zwracane jest -1.
echo "Data powiększona o tydzień to ".date("d.m.y", strtotime('+7 days', time())); echo strtotime("now"), "\n"; echo strtotime("10 September 2000"), "\n"; echo strtotime("+1 day"), "\n"; echo strtotime("+1 week"), "\n"; echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n"; echo strtotime("next Thursday"), "\n"; echo strtotime("last Monday"), "\n";
Lista formatów dostępna tutaj.
Przykłady:
Liczenie czasu generowania strony
$start = microtime(true); for ($i = 0; $i < 10000; $i++) { $str = 'test'; } $end = microtime(true); echo 'strona wygenerowana w '.($end - $start).' sekund';
Tworzenie daty o godzinę w przód
$czas_akt = time(); $za_godz = $czas_akt + 3600; echo date("r", $za_godz); // Wyświetli datę 'za godzinę'
Data „za miesiąc”
$day = date('d'); // dzień $month = date('m'); // miesiąc $year = date('Y'); // rok // dodanie jedynki do miesiąca $month++; // sprawdzenie czy licznik się nie przekręcił if ($month == 13) { $month = 1; $year++; }
Odliczanie czasu do konkretnego wydarzenia:
function CountDown($hour, $minute, $second, $month, $day, $year) { $eventDate = mktime($hour, $minute, $second, $month, $day, $year); $today = time(); $secondsTo = $eventDate - $today; $minutesTo = round($secondsTo / 60); $hoursTo = round($minutesTo / 60); $daysTo = round($hoursTo / 24); $weeksTo = round($daysTo / 7); $monthsTo = round($weeksTo / 4); $yearsTo = round($monthsTo / 12); $values = "seconds ".$secondsTo.", minutes ".$minutesTo.", hours ".$hoursTo.", days ".$daysTo.", weeks ".$weeksTo.", months ".$monthsTo.", years ".$yearsTo; return $values; } echo CountDown(12,0,0,10,5,2019);
Baner zależny od pory dnia
function getBannerName() { $hour = date("G"); if($hour > 22 || $hour < 4){ return("banner1.gif"); } else if($hour >= 4 && $hour < 12){ return("banner2.gif"); } else if($hour >= 12 && $hour < 18){ return("banner3.gif"); } else if($hour >= 18 && $hour <= 22){ return("banner4.gif"); } } $str = "<IMG SRC='". getBannerName() ."'>"; echo($str);
Sprawdzanie czy daty są z tego samego dnia
<?php function sameDay($ts1, $ts2) { if (date("Y", $ts1) != date("Y", $ts2)) { return False; } if (date("m", $ts1) != date("m", $ts2)) { return False; } if (date("d", $ts1) != date("d", $ts2)) { return False; } return True; } $date1 = mktime(19, 30, 0, 12, 10, 2001); $date2 = mktime(10, 12, 0, 12, 10, 2001); $date3 = mktime(19, 30, 0, 12, 11, 2001); if (sameDay($date1, $date2)) { echo "Daty 1 i 2 są z tego samego dnia"; } if (sameDay($date1, $date3)) { echo "Daty 1 i 3 są z tego samego dnia"; } ?>
Zadania do wykonania:
Zadanie 1: Napisz skrypt, który będzie pokazywał aktualna datę i czas w postaci: Dzisiaj jest 30.10.2018 godzina 16:50:47
Zadanie 2: Napisz skrypt sprawdzający w jaki dzień tygodnia się urodziłeś/łaś oraz sprawdź ile czasu zostało do twoich urodzin.