Téma: Práca s dátumom a časom v PHP
Úloha: Vytvorte webovú stránku s názvom time.php, ktorá bude obsahovať PHP skript pomocou ktorého sa na stránke zobrazí aktuálny čas, názov dňa v týždni a aktuálny dátum v slovenskom zápise.
Podmienky: Vytvorený dokument umiestnite na svoj blog v položke PHP ako „Zadanie č.8 Dátum a čas“ s plným znením úlohy a odkazom na súbor time.php
Teória :
Dátum a čas v PHP
Základný formát dátumu a času v PHP je číslo, ktoré udáva počet sekúnd uplynulých od 1. januára 1970. Aktuálnu hodnotu získame volaním funkcie Time (). Táto funkcia nemá žiadne parametre, preto sú zátvorky prázdne. Hoci čas v tomto formáte asi nebudeme ukazovať bežnému návštevníkovi, má jednu veľkú výhodu – dobre sa s ním počítajú napr. časové rozdiely medzi dvoma okamihmi atď.
Hoci pre programátora je vyššie uvedený formát veľmi príjemný, predtým, než ho naservírujeme nášmu návštevníkovi, musíme ho upraviť do bežného tvaru (dni, mesiace, roky, hodiny, minúty, sekundy, deň v týždni atď). K tomu v PHP slúži veľmi univerzálna funkcia Date. Má dva parametre – reťazec udávajúci požadovaný formát výstupu a celé číslo udávajúce čas v „škaredom“ tvare, t.j. ako počet sekúnd od 1. 1. 1970. Ak druhý parameter vynecháme, použije sa aktuálny čas, výsledok je teda rovnaký, ako keby sme na miesto druhého parametra napísali Time (). Aktuálny čas môžeme za použitia funkcie Date vypísať napríklad takto:
echo Date("H: i: s");
Vyššie uvedený príkaz vypíše aktuálny čas v hodinách, minútach a sekundách (napr. 21:45:03). Formátovací reťazec sa skladá zo znakov, ktoré zastupujú napríklad počet hodín, minút, sekúnd (v našej ukážke H, i, s), a z ostatných znakov (v našej ukážke dvojbodky, ďalej sa nám budú hodiť napr. medzery alebo čiarky), ktoré sa v nezmenenej podobe objavia vo výstupe. Tu je zoznam špeciálnych znakov, ktoré vo formátovacom reťazci môžeme použiť:
y … rok ako dvojčíslie (00)
Y … rok ako štvorčíslie (2000)
L … 0 (nepriestupný rok) alebo 1 (priestupný rok)
z … číslo dňa v roku (001-365)
m … číslo mesiaca (01-12)
n … číslo mesiaca (bez počiatočnej nuly, 1-12)
M … anglická skratka názvu mesiaca (Jul)
F … anglický názov mesiaca (July)
d … číslo dňa v mesiaci (01-31)
j … číslo dňa v mesiaci (bez počiatočnej nuly, 1-31)
t … počet dní v danom mesiaci (28-31)
S … anglická koncovka čísla dňa v mesiaci (st, nd, rd, th)
D … anglická skratka názvu dňa v týždni (Mon)
l … anglický názov dňa v týždni (Monday)
w … číslo dňa v týždni (0-6 alebo 1-7 v závislosti na verzii PHP – nedeľa má číslo 0 alebo 7)
h … hodiny (01-12)
g … hodiny (bez počiatočnej nuly, 1-12)
H … hodiny (01-23)
G … hodiny (bez počiatočnej nuly, 1-23)
a … am / pm (dopoludnia / popoludní)
A … AM / PM (dopoludnia / popoludní)
i … minúty (00-59)
s … sekundy (00-59)
U … počet sekúnd od 1. januára 1970
Niektoré znaky nemusia fungovať v starších verziách PHP. Vyskúšajte si nasledujúci skript, kde sú funkcie Time a Date prakticky demonštrované:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset="UTF-8">
<title> PHP - ukážka </title>
</head>
<body> <bgcolor="#FFFFFF" text="#000000">
<center> <font face="Arial CE, Arial" size="5">
<?php
$Mesiace = array("januára", "februára", "marca", "apríla", "mája", "júna", "júla", "augusta", "septembra", "októbra", "novembra", "decembra");
echo "Čas ako počet sekúnd od 1. 1. 1970:". Time(). "<br>";
echo "Dátum a čas:". Date("d. n. Y, H: i: s"). "<br>";
echo "Dátum a čas pre pokročilých:". Date("j"). ".". $Mesiace[Date("n") - 1]. "". Date(" Y"). ",". Date(" H: i: s"). "<br>";
?>
</font> </ center>
</body>
</html>
Všetko by už malo byť jasné, vygenerovanie názvu českého mesiaca vrátane príslušného pádu je zaistené poľom $Mesiace naplneným príslušnými názvami.
Občas budeme stáť pred opačným problémom, ako rieši funkcia Date – budeme potrebovať previesť dátum v „tradičnom“ formáte (tj roky, mesiace, dni, hodiny, minúty, sekundy) previesť na počet sekúnd od 1. 1. 1970, s ktorým budeme ďalej pracovať. K tomu sa hodí funkcia MkTime. Tá má po sérii týchto šesť číselných parametrov – hodiny, minúty, sekundy, mesiace, dni, roky. Parametre možno od konca vynechávať, doplní sa na základe aktuálneho času. Volanie MkTime () má teda rovnaký efekt ako Time (). Malý príklad – nasledujúce použitie funkcií Date a MkTime má za následok vypísanie 1. 7. 2000, 12:30:00:
echo Date("d n Y, H: i: s", MkTime(12, 30, 0, 7, 1, 2000));
Funkcia MkTime si poradí i s nekorektne zadanými hodnotami a „pretečie“ ich do vyššieho rádu (tj 30. februára v nepriestupnom ruke interpretuje ako 2. marca apod).
Zhrnutie alebo čo si treba pamätať
- V PHP je čas vyjadrený ako počet sekúnd od 1. januára 1970. Aktuálnu hodnotu času v tomto formáte vracia funkcia Time ().
- K prevodu času vyjadreného v sekundách na tvar zrozumiteľný bežnému užívateľovi slúži funkcia Date.
- Naopak k prevodu bežného formátu na sekundový sa hodí funkcia MkTime.
