将当前日期与 PHP/MySQL 中的生日进行比较
Compare current date with birthday in PHP/MySQL
我得到了以下代码,除了一个主要缺陷外,它工作得很好......只有当 birthday/anniversary 与当前年份相同时才有效。
<?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
我得到了以下代码,除了一个主要缺陷外,它工作得很好......只有当 birthday/anniversary 与当前年份相同时才有效。
<?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