2010-10-06 10 views

Odpowiedz

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

Aby dodać co Tim powiedział:

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

Należy również umożliwić Teda urodziny 2004-02-29 - w 2011 roku będzie obchodził swoje urodziny na 02-28. –

+0

Przyjemna myśl Tim, jak to możliwe? – Johnson

+0

Dzięki Tim. Zmieniłem w odpowiedzi. – CristiC

10

Ta odpowiedź powinien pracy, ale to zależy od strtotime jest w stanie zorientować się, format daty bazy danych to:

$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_ nie wystarczy w tym skomplikowanym świecie. Obliczenia daty i czasu zawsze mają ukryte trudności na różnych krawędziach i wystąpieniach. Bardzo trudno jest sprawdzić urodziny dla kogoś urodzonego w dniu 29 lutego. Sprawdzanie lat przestępnych jest skomplikowane. To zasługuje na pewne gotowe rozwiązanie. – Gherman

+0

@German No cóż, strtotime jest napisane przez osobę trzecią ... Nawiasem mówiąc, zauważyłem, że przypadkowo połączyłem się ze stroną podręcznika strptime, kiedy to pisałem ... która jest inną funkcją. Nawiasem mówiąc, ponieważ ta odpowiedź została napisana, do PHP dodano obiekty DateTime i powiązane z nimi funkcje. – Powerlord

0

Od PHP 5.2 w górę:

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)); 
} 
Powiązane problemy