У меня есть день рождения пользователя, сохраненный в birthday
как 1999-02-26.PHP: Проверка дня рождения Сегодняшняя дата
Как я могу проверить, сегодня ли день рождения?
if(date('m-d') == ..?
У меня есть день рождения пользователя, сохраненный в birthday
как 1999-02-26.PHP: Проверка дня рождения Сегодняшняя дата
Как я могу проверить, сегодня ли день рождения?
if(date('m-d') == ..?
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'))
Этот ответ должен работу, но это зависит от 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!
}
_Should_ недостаточно в этом сложном мире. Эти расчеты даты и времени всегда имеют скрытые трудности при разных краях и встречах. Очень сложно проверить день рождения для кого-то, родившегося 29 февраля. И проверка на високосные годы сложна. Это заслуживает некоторого готового решения. – Gherman
@ German Ну, strtotime написано третьей стороной ... Кстати, я заметил, что случайно связался с страницей руководства strptime, когда я написал это ..., которая является другой функцией. Кстати, поскольку этот ответ был написан, у PHP были добавлены объекты DateTime и связанные с ним функции. – Powerlord
От PHP 5.2 вверх:
if (substr($dateFromDb, -5) === date_create()->format('m-d')) {
// Happy birthday!
}
<?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));
}
Вы должны также позволить на день рождения Теда на 2004-02-29 - в 2011 году он будет отмечать свой день рождения на 02-28. –
Приятный мыслит, как это можно сделать? – Johnson
Спасибо Тим. Я изменил ответ. – CristiC