Php 数日
我需要解决一个小问题。 打印庆祝节日前的天数。 我使用以下方法。 SQL查询Php 数日,php,mysql,Php,Mysql,我需要解决一个小问题。 打印庆祝节日前的天数。 我使用以下方法。 SQL查询 $query='SELECT * FROM '.$table.' WHERE DATE_FORMAT(holiday,CONCAT(YEAR(CURDATE()),"-%m-%d"))BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 10 DAY)'; 所以我得到了未来10天内正确的事件数 如果是生日,我需要打印截止日期的天数。 即。 1983年8月20日——4
$query='SELECT * FROM '.$table.' WHERE DATE_FORMAT(holiday,CONCAT(YEAR(CURDATE()),"-%m-%d"))BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 10 DAY)';
所以我得到了未来10天内正确的事件数
如果是生日,我需要打印截止日期的天数。
即。
1983年8月20日——4天后。
我在干什么
$holiday=new DateTime($row['holiday']);
$today = new DateTime("today");
$diff =$holiday->diff( $today)->d;
我得到了27。。没错!因为31年11个月27天的差异。我可以数一数一个月的总天数,大概是31-27天,但这似乎不是最好的办法。
如果我格式化我得到的日期字符串和差异不工作。。。
任何更简单的解决方案-如何比较不考虑年份属性的日期?
p、 我不想用moment.js。。我相信php可以解决这个问题。
p、 另外,也许我应该调整我的sql查询?您需要修改今年的假期,使之成为今年的生日
$holiday=new DateTime($row['holiday']);
$holiday->setDate(date("Y"), $holiday->format("m"), $holiday->format("d"));
$today = new DateTime("today");
$diff = $holiday->diff($today);
echo $diff->d; // = 4
我认为您可以通过一个SQL查询来实现,例如:
SELECT
people.Id,
CONCAT(
YEAR(CURDATE()),
'-', MONTH(people.Birthdate),
'-', DAY(people.Birthdate)
) AS CelebratingBirthday,
DATEDIFF(
CONCAT(
YEAR(CURDATE()),
'-', MONTH(people.Birthdate),
'-', DAY(people.Birthdate)
),
CURDATE()
) AS RemainingDays
FROM people
HAVING RemainingDays BETWEEN 0 AND 10; -- remember RemainingDays can be <0 so WHERE RemaingingDays <= 10 is not relevant
我不知道在原始查询中使用DATE_格式是否比直接使用年、月和日更有效。如果您有大量的数据需要管理,请考虑进行测试。
注意:我认为MySQL查询优化器将处理表达式CONCAT。。。只有一次,所以不要担心它在查询中出现两次
如果你有大量的数据需要管理,那么可能需要计算每个人的生日,每个新年。它将避免在每个查询中处理它,并且将更加高效。例如,您可以在系统上定义一个cron,或者在MySQL中定义一个事件(如果您使用的是最新版本)。因此,您正在寻找一种方法来使用相同的查询选择未来10天的生日列表以及生日前剩余的天数?非常简单!非常感谢你。问题在于->q差异。如果生日是今天,那么这个年龄差就代表了新的年龄。但是如果Birtday将在4天内->y差异显示它的当前年龄。无论如何,干得好。那会很有帮助的。谢谢-这就是我想做的。。但我的语法不正确。A拥有1万至1.2万人的基础。。我不确定这是否是一个巨大的基地