Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数日_Php_Mysql - Fatal编程技术网

Php 数日

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

我需要解决一个小问题。 打印庆祝节日前的天数。 我使用以下方法。 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天后。 我在干什么

$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万人的基础。。我不确定这是否是一个巨大的基地