© 2013 All rights reserved.
9

PHP: slovní vyjádření data

Pro PHP lze vymyslet více způsobů jak jednoduše zobrazit české názvy měsíců nebo dnů v operaci s datumy. Každý ze způsobů má určitě své výhody i nevýhody.

Dost častým problémem v PHP je vypsání českého data, kdy je třeba aby datum bylo vypsáno slovně. Na výstupu potřebujeme dostat takovýto řetězec:

Ukážeme si dva jednoduché způsoby, jak datum do takovéhoto tvaru dostat a pomocí PHP jej vypsat.

Nadefinování hodnot

První a pracnější způsob spočívá v nadefinování hodnot názvů, z nichž budeme hodnoty pro výpis čerpat. Způsobů jak hodnoty nadefinovat je spousta, nejjednodušší z nich je asi vytvořit si dvě pole pro měsíce a dny v týdnu. Z těchto hodnot polí potom už jednoduše získáme příslušné data.

Jak je vidět, pro výpis jednoho data je tímto způsobem potřeba spousta zbytečného zdrojového kódu. Kód by šel určitě zefektivnit, ale to není podstatné a i tak je tento způsob zbytečně obsáhlý a pracný.

Představte si například situaci, kdy je udělána podpora pro několik jazyků a pro každý jazyk zvlášť by bylo potřeba slovní hodnoty definovat.

SetLocale

Druh, jednodušší způsob nám nabízí přímo PHP v podobě funkce SetLocale, pro nastavení lokálních informací:

Funkce obsahuje dvě vstupní proměnné, z nichž první je kategorie, jež representuje funkce, které budou pomocí SetLocale ovlivněny.

Jelikož pracujeme s daty a časovými údaji, bude nás samozřejmě zajímat kategorie LC_TIME, která ovlivní práci s funkcí strftime().

Druhý parametr funkce je řetězec reprezentující hodnotu, kterou chceme pro kategorii nastavit.
V kombinaci s funkcí setLocale můžeme takto jednoduše dostat české názvy měsíců nebo dnů v týdnu.

Pomocí samotného strftime dostaneme námi požadovaný datum takto:

Tento způsob vrací anglické názvy:

Pokud chceme dosáhnout výpisu českých názvů, stačí pouze nastavit setLocale:

Tento způsob vrací datum v českém tvaru, ale bohužel funguje pouze pod Linuxem. V případě že potřebujeme vypisovat české data jak pod Linuxem tak pod Windows, musíme použít jiné klíčové slovo pro jeho nastavení:

Tento druhý způsob sice funguje jak pod operačním systémem Windows, tak pod OS Linux, ale bohužel nefunguje s UTF kódováním, ale vrací WINDOWS-1250.

V tomto případě máme dvě možnosti jak problém řešit, první z nich je převést zdrojový soubor do jiného kódování – WINDOWS-1250, ve kterém se názvy zobrazí správně:

Druhá možnost je převést řetězec do UTF, pomocí funkce iconv:

Výhoda způsobu pomocí setLocale je v jednoduchém nastavení jazyků, kdy pouhým přepsáním jedné konstanty dosáhneme změny názvů všech hodnot.

Comments (9)

Dnes jsem mel moznost tvuj napad aplikovat v praxi. Bohuzel nazvy tydnu php vraci s velkym pismenem na zacatku. Mely by byt s maly pismenem.

Diky za upozorneni.

Dekuji za clanek,opet jsem o neco chytrejsi. Vyuzival jsem prvni zpusob ale ten druhy je opravdu elegantni! Mam rad, kdyz je kod chytre napsany:)

Jen dotaz, vyvijis na OS Windows nebo Linux? Co mas na serveru za OS?

Ahoj,
pokud myslíš PHP, tak nejčastěji ve Windows Vista.
Jinak na serveru máme instalovaný Debian.
Linux pro mě není žádný problém, ale Windows mi připadají pohodlnější, jenom díky nim občas vznikají zbytečné problémy.

Prave kvuli tem obcasnym zbytecnym problemum jsem presel v programovani na debian, abych mel podobne prostredi jako na serveru.
Windows stale pouzivam k ladeni designu (html, css, IE7, jiste chapes) a spousteni her:D
Co pouzivas za IDE? ja zend studio

V linuxu pouzivam jEdit, neni nic moc, ale existuje do nej spousta pluginu.
Pod windows pouzivam http://www.zaachi.com/cs/items/nusphere-phped.html

Zajimave, v clanku o phped jsem se ale nedocet jestli umi spolupracovat s SVN? to je pro mne hodne dulezita vec

elegantní řešení, super. díky

Jakub

Dobrý den,
zajímalo by mě jestli je možné název měsíce sklonovat?

Leave a Reply to pabLos Cancel Reply

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836