2010-10-06 6 views

ответ

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

Чтобы добавить, что сказал Тим:

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

Вы должны также позволить на день рождения Теда на 2004-02-29 - в 2011 году он будет отмечать свой день рождения на 02-28. –

+0

Приятный мыслит, как это можно сделать? – Johnson

+0

Спасибо Тим. Я изменил ответ. – CristiC

10

Этот ответ должен работу, но это зависит от strtotime возможности выяснить формат даты вашей базы данных:

$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_ недостаточно в этом сложном мире. Эти расчеты даты и времени всегда имеют скрытые трудности при разных краях и встречах. Очень сложно проверить день рождения для кого-то, родившегося 29 февраля. И проверка на високосные годы сложна. Это заслуживает некоторого готового решения. – Gherman

+0

@ German Ну, strtotime написано третьей стороной ... Кстати, я заметил, что случайно связался с страницей руководства strptime, когда я написал это ..., которая является другой функцией. Кстати, поскольку этот ответ был написан, у PHP были добавлены объекты DateTime и связанные с ним функции. – Powerlord

0

От 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)); 
} 
Смежные вопросы