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.