将当前日期与PHP / MySQL中的生日进行比较

时间:2015-03-01 22:37:10

标签: php mysql date

我有以下代码,除了一个主要缺陷外,效果非常好......只有在生日/周年纪念与当前年份相同的情况下才有效。

<?php
    $query = mysql_query( "SELECT mFN, mSN, TIMESTAMPDIFF(YEAR, mBirthday, CURDATE()) 
    AS mAge, mBirthday FROM memberData WHERE mBirthday BETWEEN CURDATE() + INTERVAL 1 DAY AND CURDATE() + INTERVAL 1 WEEK" );
    while ($rows = mysql_fetch_array($query, MYSQL_ASSOC)) {
        echo sprintf("%s %s will be %s on the %s. <br>", $rows['mFN'], $rows['mSN'], $rows['mAge'], $rows['mBirthday']);
}

所以这样做,将当前日期+一周的间隔与存储的生日进行比较......

如果有人生日是在2015年3月5日,它会找到它们! 虽然如果某人的生日是在1995年3月5日生日,那么因为这一年没有运气......我对如何解决这个问题有任何想法?编程很新,不知道如何解决这个问题。

<?php
    $query = mysql_query( "SELECT mFN, mSN, TIMESTAMPDIFF(YEAR, 
   STR_TO_DATE( concat(year(curdate()), '-', month(mBirthday), '-', day(mBirthday) ), '%Y-%m-%d' ) , CURDATE()) 
AS mAge, mBirthday FROM memberData 
WHERE 
   STR_TO_DATE( concat(year(curdate()), '-', month(mBirthday), '-', day(mBirthday) ), '%Y-%m-%d' )  
      BETWEEN CURDATE() + INTERVAL 1 DAY AND CURDATE() + INTERVAL 1 WEEK

    while ($rows = mysql_fetch_array($query, MYSQL_ASSOC)) {
        echo sprintf("%s %s will be %s on the %s. <br>", $rows['mFN'], $rows['mSN'], $rows['mAge'], $rows['mBirthday']);
}
?>

im gettinng Parse错误:语法错误,意外的T_STRING,sprintf行。

1 个答案:

答案 0 :(得分:2)

您可以匹配month()day()功能。例如:

where month(CURDATE()) = month(yourdate) and day(curdate()) = day(yourdate)

你应该在闰年时小心(2月29日)。

要测试当年的日期,您可以使用以下内容:

-- replace year in test date with current year
STR_TO_DATE( concat(year(curdate()), '-', month(mBirthday), '-', day(mBirthday) ), '%Y-%m-%d' ) 

虽然将月份和日期存储为数据库中的单独字段可能更有效。

最终查询类似于:

SELECT mFN, mSN, 
    TIMESTAMPDIFF(YEAR, mBirthday, CURDATE()) AS mAge, 
    mBirthday FROM memberData 
WHERE 
   STR_TO_DATE( concat(year(curdate()), '-', month(mBirthday), '-', day(mBirthday) ), '%Y-%m-%d' )  
      BETWEEN CURDATE() + INTERVAL 1 DAY AND CURDATE() + INTERVAL 1 WEEK 

以下是替代方法:

finding if an anniversary is coming up in n days in MySql