Autor Zpráva
Sam Carter
Profil *
Ahoj, scháním nějaký kód, který mi zobrazí narozeniny mnoj zadaných lidí, tedy samozřejmě jenom v onen den. Myslím něco jako mají na sledujufilmy.cz. Mají to tam úplně dole.

Moderátor Petr ZZZ: Vlákno promazáno (odstraněno několik nehodnotných textů autora Sitole a reakcí na ty texty).
Fisir
Profil
Moderátor Petr ZZZ: Odstraněna reakce na smazaný text.
Reaguji na Sama Cartera:
Nejprve si musíš sestavit seznam lidí a jejich data narození, třeba pomocí pole:
$narozeniny = array(
  '1990-10-22' => 'Člověk 1',
  '1994-03-02' => 'Člověk 2',
  '1986-12-24' => 'Člověk 3'
);
Pak projdeš jednotlivé položky a zjistíš, jestli se ten člověk narodil ve stejný den a měsíc, který je dneska:
foreach($narozeniny as $datum => $jmeno){
  $datum = strtotime($datum);
  if(date('m', $datum) == date('m') and date('d', $datum) == date('d')){
    echo('<p>'.htmlspecialchars($jmeno).' má dnes narozeniny!</p>');
  }
}

Samozřejmě, že lze použít i databázi, jak radí Sitole. V takovém případě můžeš přeskočit proces porovnávání v PHP a vybrat si jen takové záznamy, které odpovídají dnešnímu datu.
Sitole
Profil
Fisir:
Z toho co jsem přečetl jsem soudil, že nezná mysql. Jinak se omlouvám za zdroj, ale v tu chvíli to byl první nápad. Administrace databáze bude asi jednoduší, ale vypsání to přímo v PHP bude mnohem rychlejší a nepotřebuješ hosting s podporou databáze.
Radek9
Profil
Fisir:
Tohle by vracelo špatné výsledky pro data narození před rokem 1970. Doporučil bych místo toho použít třídu DateTime.

Edit: Teď na to koukám a ono to evidentně umí pracovat i se záporným timestampem. Problém nastává při příliš nízkých číslech, kdy to může vracet nečekané hodnoty. Vzalo mi to ještě pár měsíců z roku 1901, níž už to ale házelo jiné roky.
Fisir
Profil
Reaguji na Radka9:
Já v tom nevidím žádný problém, bez problémů prošly narozeniny z roku 235.

Ještě doplním, že kód funguje zcela dle očekávání až od PHP 5.3. PHP 4.4, PHP 5.0 a PHP 5.2 mohou mít problémy s určením správného roku, ale klíčová podmínka pro den a měsíc správně projde. Radek9 kód pravděpodobně testoval na archaické verzi PHP 5.1, která skutečně má pod ním zmíněnou hranici roku 1902 problém. Nepovažuji to ale za důležité, jelikož tato verze je dávno zastaralá, nepodporovaná a nebezpečná.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0