Po obráceném postupu výkladu v minulém díle tentokrát budeme opět postupovat tradiční cestou. V dnešním článku o tvorbě PHP se podíváme na to, jak se v PHP pracuje s datumem a časem.

Základní formát datumu a času v PHP je číslo, které udává počet sekund uplynulých od 1. ledna 1970. Aktuální hodnotu získáme voláním funkce Time (). Tato funkce nemá žádné parametry, proto jsou závorky prázdné. Ačkoliv čas v tomto formátu asi nebudeme ukazovat běžnému návštěvníkovi, má jednu velkou výhodu – dobře se s ním počítají např. časové rozdíly mezi dvěma okamžiky atd.

Přestože pro programátora je výše uvedený formát velmi příjemný, předtím, než ho naservírujeme našemu návštěvníkovi, musíme ho upravit do běžného tvaru (dny, měsíce, roky, hodiny, minuty, sekundy, den v týdnu atd.). K tomu v PHP slouží velmi univerzální funkce Date. Má dva parametry – řetězec udávající požadovaný formát výstupu a celé číslo udávající čas v „ošklivém“ tvaru, tj. jako počet sekund od 1. 1. 1970. Pokud druhý parametr vynecháme, použije se aktuální čas, výsledek je tedy stejný, jako kdybychom na místo druhého parametru napsali Time (). Aktuální čas můžeme za použití funkce Date vypsat třeba takto:

echo Date („H:i:s“);

Výše uvedený příkaz vypíše aktuální čas v hodinách, minutách a sekundách (např. 21:45:03). Formátovací řetězec se skládá ze znaků, které zastupují např. počet hodin, minut, sekund (v naší ukázce H, i, s), a z ostatních znaků (v naší ukázce dvojtečky, dále se nám budou hodit např. mezery nebo čárky), které se v nezměněné podobě objeví ve výstupu. Zde je seznam speciálních znaků, které ve formátovacím řetězci můžeme použít:

y … rok jako dvojčíslí (00)
Y … rok jako čtyřčíslí (2000)
L … 0 (nepřestupný rok) nebo 1 (přestupný rok)
z … číslo dne v roce (001-365)
m … číslo měsíce (01-12)
n … číslo měsíce (bez případné úvodní nuly, 1-12)
M … anglická zkratka názvu měsíce (Jul)
F … anglický název měsíce (July)
d … číslo dne v měsíci (01-31)
j … číslo dne v měsíci (bez případné úvodní nuly, 1-31)
t … počet dní v daném měsíci (28-31)
S … anglická koncovka čísla dne v měsíci (st, nd, rd, th)
D … anglická zkratka názvu dne v týdnu (Mon)
l … anglický název dne v týdnu (Monday)
w … číslo dne v týdnu (0-6 nebo 1-7 v závislosti na verzi PHP – neděle má číslo 0 nebo 7)
h … hodiny (01-12)
g … hodiny (bez případné úvodní nuly, 1-12)
H … hodiny (01-23)
G … hodiny (bez případné úvodní nuly, 1-23)
a … am/pm (dopoledne/odpoledne)
A … AM/PM (dopoledne/odpoledne)
i … minuty (00-59)
s … sekundy (00-59)
U … počet sekund od 1. ledna 1970

Některé nedůležité znaky jsem vynechal, kompletní přehled najdou zájemci přímo v oficiálním PHP manuálu. Některé znaky nemusí fungovat ve starších verzích PHP. Vyzkoušejte si následující skript, kde jsou funkce Time a Date prakticky demonstrovány:

<html>
<head>
<meta http-equiv=“Content-Type“ content=“text/html; charset=windows-1250″>
<title>PHP – ukázka 3</title>
</head>
<body bgcolor=“#FFFFFF“ text=“#000000″>
<center><font face=“Arial CE, Arial“ size=“5″>
<?php
$mesice = array („ledna“, „února“, „března“, „dubna“, „května“, „června“, „července“, „srpna“, „září“, „října“, „listopadu“, „prosince“);
echo „Čas jako počet sekund od 1. 1. 1970: “ . Time () . „<br>“;
echo „Datum a čas: “ . Date („d. n. Y, H:i:s“) . „<br>“;
echo „Datum a čas pro pokročilé: “ . Date („j“) . „. “ . $mesice[Date („n“) – 1] . “ “ . Date („Y“) . „, “ . Date („H:i:s“) . „<br>“;
?>
</font></center>
</body>
</html>

Vše by už mělo být jasné, vygenerování názvu českého měsíce včetně příslušného pádu je zajištěno polem $mesice naplněným příslušnými názvy.

Občas budeme stát před opačným problémem, než řeší funkce Date – budeme potřebovat převést datum v „tradičním“ formátu (tj. roky, měsíce, dny, hodiny, minuty, sekundy) převést na počet sekund od 1. 1. 1970, se kterým budeme dále pracovat. K tomu se hodí funkce MkTime. Ta má po řadě těchto šest číselných parametrů – hodiny, minuty, sekundy, měsíce, dny, roky. Parametry lze od konce vynechávat, doplní se na základě aktuálního času. Volání MkTime () má tedy stejný efekt jako Time (). Malý příklad – následující použití funkcí Date a MkTime má za následek vypsání 1. 7. 2000, 12:30:00:

echo Date („d. n. Y, H:i:s“, MkTime (12, 30, 0, 7, 1, 2000));

Funkce MkTime si poradí i s nekorektně zadanými hodnotami a „přeteče“ je do vyššího řádu (tj. 30. února v nepřestupném ruce interpretuje jako 2. března apod.).

Shrnutí anebo co si je třeba pamatovat

  • V PHP je čas vyjádřen jako počet sekund od 1. ledna 1970. Aktuální hodnotu času v tomto formátu vrací funkce Time ().
  • K převodu času vyjádřeného v sekundách na tvar srozumitelný běžnému uživateli slouží funkce Date.
  • Naopak k převodu běžného formátu na sekundový se hodí funkce MkTime.

V dalším díle si ukážeme, jak lze pomocí příkazu include vkládat do stránky kusy dalších kódů a jak si tímto způsobem ušetřit práci s údržbou rozsáhlejších webů.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

2 Příspěvků v diskuzi

  1. Díky, dost pomohlo. Stálo by za to se zmínit, že čas vracený funkcí time() je nejvhodndější formát času pro ukládání do databáze.

  2. možná by nebylo od věci zmínit problém týkající se roku 2038 – takže z hlediska dlouhodobých aplikací bych tvrzení „nejlepší formát pro ukládání do databáze“ radši vynechal :-)

Odpovědět