Jak pracovat s časem v PHP?

Práce s funkcemi určenými pro získání nebo převod času je někdy dost náročná, proto si vysvětlíme, v jakém formátu je nejefektivnější ho ukládat, a spoustu dalších věcí.
Práce s funkcemi určenými pro získání nebo převod času je někdy dost náročná, proto si vysvětlíme, v jakém formátu je nejefektivnější ho ukládat, a spoustu dalších věcí.

Nejprve bych chtěl zdůraznit, že tento článek je určen pro začátečníky a nikoliv pro pokročilé programátory.

Jakmile vkládáme do databáze časový údaj, většinou chceme, aby byl co nejpřesnější, tzn., že budeme chtít čas přesný na vteřiny, kvůli výběrům z databáze seřazených podle data vložení. Proto je lepší do databáze ukládat čas ve vteřinách od 1.1.1970 pomocí fce Time(). Hned si řekneme proč.

Možná vám to připadá nelogické ukládat počet vteřin od roku 1970, ale v konečném efektu se opravdu hodí. Jakmile budete potřebovat vybrat položky z vaší databáze, v mnoha případech je budete vybírat pomocí "order by" (seřadit podle), což znamená, že ve finále zobrazíte chronologicky položky, které jste po určitou dobu zapisovali do databáze. Další překážka spočívá v tom, že čas není v tomto formátu publikovatelný, to ale řeší funkce v PHP, které dokáží tento formát převést na jakýkoliv již publikovatelný formát.

Pro úpravu tohoto časového údaje se nejvíce hodí funkce StrFtime(); zde je přehled všech parametrů, které můžete pro tuto funkci použít:

Parametr Popis
%a Zkratka dne v týdnu
%A Jméno dne v týdnu
%b Zkratka jména měsíce
%B Jméno měsíce
%c Vypsání data a času podle národních zvyklostí
%d Číslo dne v měsíci (01-31)
%H Hodina (00-23)
%I Hodina (01-12)
%j Číslo dne v roce (0-366)
%m Číslo měsíce (01-12)
%M Minuta
%p Indikátor dopoledne/odpoledne
%S Sekunda
%U Číslo týdne v roce (01-51)
%w Číslo dne v týdnu
%W Číslo týdne v roce (01-51)
%x Datum podle mezinárodních zvyklostí
%X Čas podle mezinárodních zvyklostí
%y Rok jako dvojčíslí (01)
%Y Rok jako čtyřčíslí (2001)
%z, %Z Časová zóna nebo její zkratka
%% Vypsání znaku `%`

Mnohé z vás určitě napadlo, že funkce bude některé parametry vypisovat v anglickém tvaru. Tak například parametr %w slouží k vypsání čísla dne v týdnu, ale s normálním nastavením nám vypíše vždy číslo o jedno menší, než jak jsme zvyklí (anglický týden totiž začíná nedělí). Naštěstí vše zachrání funkce SetLocale(), která nám umožní nastavit národní zvyklosti na náš stát. Použití v praxi vypadá následovně:

<?
/* LC_ALL nastaví automaticky všechny kategorie najednou a parametr Czech je doufám jasný */
SetLocale("LC_ALL", "Czech");
?>

A zde je ukázka použití některých velice užitečných parametrů:

<?
/*aktuální čas ve vteřinách uložíme do proměnné $time pomocí již zmiňované funkce Time()*/
$time = Time();

/*nyní můžeme vyžít funkci StrFTime(), se kterou můžeme vypsat jakýkoliv časový údaj všeobecný formát pro tuto funkci je StrFTime($format_casu, $cas_ve_vterinach); */

/*vypíše sobota 07. duben 2001 odp. – bez funkce SetLocale by to bylo Saturday 07. April 2001 PM */
SetLocale("LC_ALL", "Czech");
echo StrFTime("%A %d. %B %Y %p");

/* převod vteřin na předchozí typ data; jak vidíte, jedná se pouze o to, že za parametry formátu přidáme proměnnou, se kterou má funkce pracovat */
echo StrFTime("%A %d. %B %Y %p", $time);

/* převod na běžný čas, vypíše 07.04.2001 12:44:13*/
SetLocale("LC_ALL", "Czech");
echo StrFTime("%d.%m.%Y %H:%M:%S", $time);
?>

Ke stejným účelům slouží další funkce jako třeba GMDate(), MkTime() nebo funkce Date(), která se svými jednoduššími parametry patří k nejpoužívanějším.

Zde je tabulka parametrů pro funkci Date():

Parametr Popis
Y Rok jako čtyřčíslí
y Rok jako dvojčíslí
M Anglická zkratka jména měsíce
m Číslo měsíce (01-12)
F Anglické jméno měsíce
D Anglická zkratka dne v týdnu
l Anglické jméno dne v týdnu
w Číslo dne v týdnu (1-7)
d Číslo dne v měsíci (01-31)
j Číslo dne v měsíci (1-31)
z Číslo dne v roce (001-365)
H Hodina (00-23)
h Hodina (01-12)
i Minuta (00-59)
s Sekunda (00-59)
U Počet sekund od 1.1.1970
S Anglická koncovka pořadového čísla dne v měsíci
A Indikátor dopoledne/odpoledne (AM/PM)
a Indikátor dopoledne/odpoledne (am/pm)

Funkce Date() se používá velice podobně jako předchozí popisovaná funkce StrFTime() s tím rozdílem, že funkce rovnou vypisuje údaje o číslu dne v týdnu v evropském standardu a parametry jsou lepší k zapamatování, než u StrFTime().

Zde je opět ukázka:

<?
/* vypíše 07.04.2001 12:44:13 */
echo Date("d.m.Y H:i:s", $time);
?>

Váš názor Další článek: Projektové a procesní řízení počátkem května v Brně

Témata článku: Software, PHP, Programování, Předchozí den, Echo, Anglická zkratka, Time, Funkce, Stejný účel, Vteřina, Časová zóna, GMD, Přesný tvar


Určitě si přečtěte


Aktuální číslo časopisu Computer

Megatest: 20 powerbank s USB-C

Test: mobily do 3 500 Kč

Radíme s výběrem routeru

Tipy na nejlepší vánoční dárky