Počeštění formátu data
Ve vícejazyčné aplikaci můžeme chtít pro každý jazyk nastavit jiný formát data. Slušné formátovací možnosti nabízí funkce strftime, která pro některá formátování vrací i textovou reprezentaci měsíce nebo dne v týdnu v jazyce nastaveném funkcí setlocale. Problém však nastává v případě, kdy pro daný jazyk nemá systém odpovídající překlad nebo když chceme používat překlady vlastní. Tehdy je možné formát data rozložit na jazykově závislé a nezávislé části a závislé přeložit vlastní funkcí:
<?php /** Formátování data s přeložením textových částí funkcí lang() * @param string formát stejný jako u funkce date() * @param int timestamp nebo time() při neuvedení * @return string zformátované a přeložené datum * @copyright Jakub Vrána, https://php.vrana.cz/ */ function date_lang($format, $timestamp = null) { if (!isset($timestamp)) { $timestamp = time(); } $return = ""; $rest = ""; for ($i=0; $i < strlen($format); $i++) { if (strpos("DlSFMaAeT", $format[$i]) !== false) { $return .= (strlen($rest) ? date($rest, $timestamp) : "") . lang(date($format[$i], $timestamp)); $rest = ""; } else { $rest .= $format[$i]; } } return $return . (strlen($rest) ? date($rest, $timestamp) : ""); } ?>
Aby se funkce date nemusela volat zbytečně mockrát, ukládá se jazykově nezávislý formát do proměnné $rest
, na kterou se funkce zavolá až když to je potřeba. Volání po každém znaku by bylo jednodušší, ale neefektivnější.
Diskuse
bukaJ:
Nechápu význam $matches[4] na konci...
Jakub Vrána
:
Byl to omyl, odstranil jsem to.


Jindra:
Jsem sice zacatecnik, ale hodilo mi to 2 chyby: 1. nedefinovane $time (? chyba na radku č. 3 fce) a 2. nedefinovana fce lang(). poradi nekdo s fci lang()?
Jakub Vrána
:
1. Proměnná $time má být $timestamp – opravil jsem to.
2. Funkci lang() si sám nadefinuj – bude se starat o překlad.


Jarda:
Mám v INT počet dnů od 1.1.1970 jak dosáhnu výpisu datumu prosím. DíkyDiskuse je zrušena z důvodu spamu.

