php - 在 PHP/MySQL 中比较当前日期与生日

标签 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']);
}
?>

我遇到解析错误:语法错误,意外的 T_STRING,sprintf 行。

最佳答案

您可以匹配 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

关于php - 在 PHP/MySQL 中比较当前日期与生日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28800053/

相关文章:

php - 警告 : Unknown: failed to open stream: No such file or directory in Unknown on line 0

javascript - 如何获取客户端的sql列值总和?

javascript - 为什么解析语言环境日期字符串会导致无效日期?

java - 在 Java 中操作和存储日期的最佳实践是什么?

java - 在java中格式化XMLGregorianCalendar

php - PHPDoc "static"返回类型在这里表示什么?

php - 允许在 php 聊天中换行 - MySQL PHP

php - HTML:将表格放入表单中

mysql - 寻找一个选项来比较sql文件和csv格式的txt文件的数据

java - 安卓APP+SQL