Grafika publishing webtip.cz grafika.cz mujiPod.cz mujmac.cz fotografovani.cz printing.cz builder.cz galerie
webtip.cz
adresář  | práce  | diskuse  | redakce  | inzerce
 
 


  Svátky v PHP
o autorovi 
poslat mailem 
tisknout článek 
aktuální rubrika 
Jistě jste si všimli, že na mnoha www stránkách najdete informaci, kdo zrovna dnes slaví či zítra oslaví svůj svátek. Proč byste takto nezpestřili i své stránky...

Pecka Miroslav - 03.03.2003 - tutorial - Rubrika: PHP

Jistě jste si všimli, že na mnoha www stránkách najdete informaci, kdo zrovna dnes slaví či zítra oslaví svůj svátek. Proč byste takto nezpestřili (je-li to vzhledem k povaze stránek vhodné) i své stránky...

Co vlastně níže uvedený "svátkovací" PHP skript dělá? Skript zjistí aktuální číslo dne v roce (0-365) a podívá se do pole (array $svatky), kde máme uloženy svátky pro jednotlivé dny. Stejným způsobem je možno zjistit také kdo měl svátek například včera nebo bude mít zítra. Výsledný skript zobrazí např. (je-li dnes 6. 1.):

Včera měl/a svátek Dalimil, dnes jsou Tři králové, zítra má svátek Vilma

Pokud se chceme podívat i na včerejšek či zítřek, nastává první drobná komplikace. Pokud je například 1. ledna (číslo dne je tedy 0 (z čehož plyne první prvek pole $svatky) a chceme-li se podívat o den zpět, index pole by byl -1 - tedy neexistující. Den předcházející 1. lednu je přece 31. prosinec, kterému odpovídá index 365. Tento problém řeší funkce cycleint($cislo), která zajistí, že je-li předpokládaný index mimo povolený rozsah (0-365), návratová hodnota funkce odpovídá takovému indexu, aby skutečně po 31. prosinci následoval 1. leden a 1. lednu předcházel 31. prosinec.

Druhá komplikace souvisí s přestupnými, resp. nepřestupnými roky. Pokud je rok přestupný, vše je bez problémů, protože rok má 366 dní, tj. stejně jako máme prvků v poli. Pokud je rok nepřestupný, je třeba ignorovat svátek pro 29. února - tj. 60. prvek pole (s indexem 59) $svatky vždy přeskočit, tj. je-li získané číslo dne >=59, je třeba k němu přičíst jedničku. Toto zařizuje funkce posun($cislo).

Jak je vidět v příkladu výše, skript ví, kdy má zobrazit text "měl/a svátek", "jsou" či "má svátek". Toto zajišťuje funkce hlaska($cislo,$minulost=0), která na základě čísla dne (již upraveného funkcemi posun a cycleint) přiřadí příslušný text (hlášku). Pokud se text (hláška) má týkat dne z minulosti (včera, předevčírem...), je třeba jako druhý parametr funkce hlaska($cislo,$minulost=0) zadat 1. Pokud chceme text v přítomném čase, není třeba 2. parametr zadávat, neboť je standardně (defaultně) nastaven na 0.

Vše vám bude zřejmější po zhlédnutí zdrojového kódu:

<?
$svatky=array(
'Nový rok',
'Karina',
'Radmila',

//...dalsi dny...
//kompletní seznam - viz zdrojový kód ke stažení

'Judita',
'David',
'Silvestr');

function posun($cislo)
{
//pokud není přestupný a získané číslo dne >=59
if (!date("L") && $cislo>=59)
return $cislo+1;
else
return $cislo;
}

function cycleint($cislo, $min=0, $max=365)
{
if ($cislo>$max)
$cislo=$min+($cislo-$max-1);
if ($cislo<$min)
$cislo=$max-($min-$cislo-1);
return $cislo;
}

function hlaska($cislo, $minulost=0)
{
switch($cislo):
  case 5:
  $hlaska=$minulost?"byli":"jsou";
  break;
  case 0:
  case 121:
  case 128:
  case 186:
  case 187:
  case 306:
  case 359:
  $hlaska=$minulost?"byl":"je";
  break;
  default:
  $hlaska=$minulost?"měl/a svátek":"má svátek";
endswitch;
return $hlaska;
}

$today=date("z"); //funkcí date() získané číslo dne
//zjištění korektních indexů
$vcera=cycleint(posun($today-1));
$dnes=cycleint(posun($today));
$zitra=cycleint(posun($today+1));

echo "Včera ".hlaska($vcera,1)." ".$svatky[$vcera].", dnes "
.hlaska($dnes)." ".$svatky[$dnes].", zítra "
.hlaska($zitra)." ".$svatky[$zitra];

?>

Jak je z kódu zřejmé, je zde dvakrát použita standardní PHP funkce date() a to s parametrem "z" (vrací den v roce v intervalu 0-365) a s parametrem "L" (vrací 1 pokud se jedná o přestupný rok, jinak vrací 0). Ve funkci hlaska jsou explicitně vyjmenovány dny, u nichž je třeba vypsat jiný než standardní text a ve větvi default je definován text pro ostatní případy. Podmíněný operátor (podmínka?pravda:nepravda) pak zajišťuje výběr mezi verzí textu v přítomném či minulém čase.

Ve výše uvedeném kódu není vypsán kompletní seznam svátků (jmen), neboť by to článek značně prodloužilo a znepřehlednilo. Zde si můžete stáhnout kompletní zdrojový kód (vč. seznamu svátků) nebo se můžete podívat kdo měl, dnes má a zítra bude mít svátek.

Pecka Miroslav


Hodnocení článku: -1- -2- -3- -4- -5-  Aktuální hodnocení: 2.71 (2366)

Relevantní články
Žádné články


Příspěvky do diskuse o aktuálním článku
slave28.01.19:22Uplne jinak
Stanislav Dobry03.03.11:45Nesikovne reseni
Miroslav Pecka04.03.18:19RE: Nesikovne reseni
Jirka Kocman13.03.19:57RE: RE: Nesikovne reseni
Stanislav Dobrý21.03.10:31RE: RE: RE: Nesikovne reseni
  

 

  O vydavateli | Kontakt | Ceník reklamy | Ochrana osobních dat
©2002 Grafika Publishing. Všechna práva vyhrazena!