2010-10-06 8 views

Antwort

5
if(date('m-d') == substr($birthday,5,5)) 

hinzuzufügen, was Tim sagte:

if(date('m-d') == substr($birthday,5,5) or (date('y')%4 <> 0 and substr($birthday,5,5)=='02-29' and date('m-d')=='02-28')) 
+5

Sie sollten auch für Ted Geburtstag am 2004-02-29 erlauben - im Jahr 2011, wird er seinen Geburtstag am 28.2 feiern. –

+0

Schöne Gedanken tim, wie könnte das getan werden? – Johnson

+0

Danke Tim. Ich habe mich in der Antwort geändert. – CristiC

10

Diese Antwort sollte Arbeit, aber es hängt von strtotime der Lage, Ihre Datenbank des Datumsformat, um herauszufinden:

$birthDate = '1999-02-26'; // Read this from the DB instead 
$time = strtotime($birthDate); 
if(date('m-d') == date('m-d', $time)) { 
    // They're the same! 
} 
+0

_Should_ ist nicht genug in dieser komplizierten Welt. Diese Datums- und Zeitberechnung hat immer versteckte Schwierigkeiten an verschiedenen Kanten und Vorkommen. Es ist sehr schwierig, den Geburtstag eines am 29. Februar Geborenen zu überprüfen. Die Suche nach Schaltjahren ist kompliziert. Dies verdient eine fertige Lösung. – Gherman

+0

@German Nun, strtotime wird von einer dritten Partei geschrieben ... Übrigens, ich bemerkte, dass ich versehentlich mit der manuellen Seite von strptime verbunden hatte, als ich das schrieb ... was eine andere Funktion ist. Übrigens, seit diese Antwort geschrieben wurde, hat PHP DateTime-Objekte und zugehörige Funktionen hinzugefügt. – Powerlord

0

Ab PHP 5.2:

if (substr($dateFromDb, -5) === date_create()->format('m-d')) { 
    // Happy birthday! 
} 
2
<?php 
/** 
* @param string $birthday Y-m-d 
* @param int $now 
* @return bool 
*/ 
function birthdayToday($birthday, $now = null) { 
    $birthday = substr($birthday, -5); 
    if ($now === null) { 
     $now = time(); 
    } 
    $today = date('m-d', $now); 
    return $birthday == $today || $birthday == '02-29' && $today == '02-28' && !checkdate(2, 29, date('Y', $now)); 
} 
Verwandte Themen