【发布时间】:2015-03-01 22:37:09
【问题描述】:
我有以下代码,除了一个主要缺陷外,它运行良好...仅当生日/周年纪念日与当前年份相同时才有效。
<?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 行。
【问题讨论】:
-
应该有 MySQL 函数返回日期戳的日期和月份数,您可以比较它们 - 只需忽略年份。在任何一年的 3 月 5 日生日时,您会分别寻找 5 和 3。