Vloženo před X minutami, hodinami, dny

Školení, která pořádám

Např. u diskusních příspěvků nebo v CVS logu je někdy přehlednější zobrazovat místo přesného času pouze informaci o tom, před jak dlouhou dobou byl záznam vložen. Elegantně se tím také vyřeší problém rozdílnosti času u klienta a na serveru a problém časových pásem. Vzhledem k tomu, že při tisku nebo po uložení stránky se může informace o aktuálním čase ztratit, doporučoval bych uvádět tento údaj jenom jako doplněk přesného času, ale v některých případech je možné tento problém zanedbat.

Pro zobrazení relativního času se dá použít MySQL funkce TIMEDIFF:

<?php
function sklonovani($num, $text_1, $text_2_4, $text_5) {
    return "$num " . (abs($num) == 1 ? $text_1 : ($num == 0 || abs($num) >= 5 ? $text_5 : $text_2_4));
}

$result = mysql_query("SELECT *, TIMEDIFF(NOW(), vlozeno) AS diff FROM diskuse");
while ($row = mysql_fetch_assoc($result)) {
    $diff = explode(":", $row["diff"]);
    if ($diff[0] > 24) {
        echo "Vloženo před " . sklonovani(floor($diff[0] / 24), "dnem", "dny", "dny") . ".\n";
    } elseif (intval($diff[0])) {
        echo "Vloženo před " . sklonovani(intval($diff[0]), "hodinou", "hodinami", "hodinami") . ".\n";
    } else {
        echo "Vloženo před " . sklonovani(intval($diff[1]), "minutou", "minutami", "minutami") . ".\n";
    }
}
mysql_free_result($result);
?>

Kód se dá samozřejmě rozšířit tak, aby zohledňoval i sekundy, měsíce nebo roky. Pokud funkce TIMEDIFF není k dispozici, dá se použít i rozdíl timestampů.

Jakub Vrána, Řešení problému, 24.5.2006, diskuse: 2 (nové: 0)

Diskuse

Michal:

To skloňování je fakt síla :-( Daleko elegantněji se to řeší pomocí GETTEXT http://interval.cz/clanky/gnu-gettext-sprava-prekladu/

ikona dgx:

Elegantněji? :-))

Místo jednoduché a srozumitelné funkce, která bude fungovat všude, raději použijete moloch, který vyžaduje speciální konfiguraci serveru? A který to navíc vnitřně řeší úplně stejně. Já si eleganci představuju docela jinak.

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.