V dnešnom článku nájdete návod, ako vypísať čas „v ľudskom formáte“. Teda namiesto presného času nejakej akcie budeme vypisovať kedy k danej akcii došlo. Napríklad „pred minútou“, „pred 4 hodinami“, „včera“…
Samozrejme možností ako vyriešiť tento problém je viac, ale ja som si vytvoril nasledovnú funkciu presne spĺňajúcu moje požiadavky.
function human_time($time, $threshold = 1) {
$current_time = time();
$diff = $current_time - $time;
if($diff < $threshold)
return 'teraz';
if($diff < 60) {
$diff = round($diff);
return 'pred ' . sklonuj($diff, 'sekundou', '% sekundami', '% sekundami');
}
if($diff < 3600) {
$diff = round($diff / 60);
return 'pred ' . sklonuj($diff, 'minútou', '% minútami', '% minútami');
}
if($diff < 3600*24) {
$diff = round($diff / 3600);
return 'pred ' . sklonuj($diff, 'hodinou', '% hodinami', '% hodinami');
}
if($diff < 3600*24*7) {
$diff = round($diff / (3600 * 24));
if($diff == 1)
return "včera";
return 'pred ' . sklonuj($diff, 'dňom', '% dňami', '% dňami');
}
$diff = round($diff / (3600 * 24 * 7));
return 'pred ' . sklonuj($diff, 'týždňom', '% týždňami', '% týždňami');
}
Použitie je veľmi jednoduché. Prvý povinný parameter je čas akcie (unix time), ktorý chceme vypísať a druhým nepovinným parametrom je prah (prednastavená je jedna sekunda), kedy sa bude vypisovať „teraz“.
// v $time je čas vykonania akcie... human_time($time);
Ak ste čítali pozorne, tak ste si všimli, že v kóde je použitá funkcia sklonuj(), ktorú nájdete v článku o skloňovaní v PHP.
A ešte jedna vec. Vo WordPresse nájdete funkciu human_time_diff(), ktorá robí to isté, avšak v závislosti od použitia môže nastať problém so skloňovaním (napríklad pri slovenčine) a aj preto som si napísal pre tento účel vlastnú funkciu.
Pridaj komentár