【问题标题】:PHP: Birthday check today´s datePHP:生日检查今天的日期
【发布时间】:2010-10-06 14:38:18
【问题描述】:

我将用户的生日存储在 birthday 中,为 1999-02-26。

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

if(date('m-d') == ..?

【问题讨论】:

    标签: php


    【解决方案1】:

    这个答案应该有效,但这取决于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!
    }
    

    【讨论】:

    • 在这个复杂的世界里,应该是不够的。那些日期和时间的计算总是在不同的边缘和出现的地方有隐藏的困难。很难检查出生于 2 月 29 日的人的生日。检查闰年很复杂。这值得一些现成的解决方案。
    • @German 好吧,strtotime 是由第三方编写的……顺便说一下,我注意到我在写这篇文章时不小心链接到了 strptime 的手册页……这是一个不同的功能。顺便说一句,由于编写了这个答案,PHP 已经添加了 DateTime 对象和相关函数。
    【解决方案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));
    }
    

    【讨论】:

      【解决方案3】:

      我用过这个

      $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';
      }
      

      【讨论】:

      • 纯代码答案在 Stack Overflow 上的价值很低。请解释您的答案与先前存在的答案有何不同,以及为什么建议研究人员使用这种技术。每个答案都应该包含一个解释,旨在教育/授权成千上万的未来研究人员。我个人从不支持纯代码答案——即使它们 100% 正确——因为那只会鼓励更多纯代码答案。
      【解决方案4】:
      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'))
      

      【讨论】:

      • 您还应该考虑到 Ted 的生日是 2004-02-29 - 2011 年,他将在 02-28 庆祝他的生日。
      • 谢谢蒂姆。我已经改变了答案。
      • 太棒了。尽管我认为您不需要检查date('y')%4,因为a。该规则并不完全正确,并且 b。输入该日期时应该验证某个日期是否有效。
      • @Tim: 使用那个检查日期('y')%4 我正在搜索闰年(一年的最后 2 位数字必须除以 4 才能成为闰年)。
      • 不过,这条规则是错误的。例如,1900 年不是闰年。 en.wikipedia.org/wiki/Leap_year (无论如何,我的评论的 b 部分仍然适用。如果您没有在输入时验证生日,有什么办法可以阻止某人输入 31-06-1950 或 99-99-9999 作为他们的生日?)
      【解决方案5】:

      PHP 5.2 以上:

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

      【讨论】:

        猜你喜欢
        • 2011-09-26
        • 2014-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-26
        • 1970-01-01
        • 2018-04-05
        相关资源
        最近更新 更多