PHP:检查生日是否为今天日期

10

我有用户的生日存在 birthday 中,格式为 1999-02-26。

如何检查今天是否是生日?

if(date('m-d') == ..?
5个回答

13

这个答案应该能够工作,但它取决于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!
}

1
在这个复杂的世界中,仅凭"应该"是不够的。时间和日期计算总是在不同的边缘和事件中隐藏着困难。对于那些出生于2月29日的人来说,检查生日非常困难。而检查闰年也很复杂。这需要一些现成的解决方案。 - Gherman
@German 好的,strtotime是由第三方编写的... 顺便提一下,当我写这篇文章时,我注意到我不小心链接到了strptime的手册页面... 它是一个不同的函数。顺便说一下,自从这个答案被写出来后,PHP已经添加了DateTime对象和相关功能。 - Powerlord
如果你检查两者的输出,当你进行比较时,它们将会匹配。 - undefined

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

To add what Tim said:

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年2月29日,2011年他的生日将在02-28庆祝。 - Tim Pietzcker
谢谢Tim。我已经在答案中进行了更改。 - CristiC
好的。虽然我不认为你需要检查 date('y')%4,因为 a.这个规则并不完全正确,b.是否验证某个特定日期是否有效应该在输入该日期时完成。 - Tim Pietzcker
@Tim:通过检查 date('y')%4,我正在寻找闰年(年份的最后两位必须能够被4整除才是闰年)。 - CristiC
1
那个规则是错误的。例如,1900年不是闰年。http://en.wikipedia.org/wiki/Leap_year (而且无论如何,我的评论中的第二部分仍然适用。如果您没有在输入时验证生日,那么有什么办法阻止某个人输入31-06-1950或99-99-9999作为他们的生日呢?) - Tim Pietzcker

3
<?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));
}

1
我使用了这个。
$birthday = new DateTime("05-28-2020");
$today = new DateTime(date("Y-m-d"));

if ($birthday->format("m-d") == $today->format("m-d")) {
 echo 'Today is your birthday';
} else {
 echo 'Today is not your birthday';
}

1
在Stack Overflow上,仅有代码的答案价值较低。请解释您的答案与现有答案的区别,并说明为什么建议研究人员使用这种技术。每个答案都应包含一个解释,旨在教育/赋能成千上万的未来研究人员。即使100%正确,我个人也不会点赞仅有代码的答案,因为那只会鼓励更多的仅有代码的答案。 - mickmackusa

0

从 PHP 5.2 开始:

if (substr($dateFromDb, -5) === date_create()->format('m-d')) {
    // Happy birthday!
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接