如何在PHP或MySQL中查找日期是否符合时间间隔?
假设我有一个约会时间,2011年6月16日7:00。我希望能够在2011年8月5日7:00检查,并且能够判断它是第一个日期后1天的倍数,而7:01不算,因为它不是一个精确的倍数 另一个测试集:假设我们有2011年6月16日的7:00,我想检查一下,从那以后,某一分钟是否正好在2小时的间隔内。所以9:00、11:00、13:00等都算,但9:30和10:00不算。这可能会持续几天甚至几个月——9月1日7:00仍然算是每2小时一次。(不,目前我不知道如何处理DST:D) 我想了一会儿,想不出PHP或MySQL中已经存在的任何东西可以轻松做到这一点,但见鬼,它可以做到,所以我想在我开始重新发明轮子之前抛出这个问题并询问一下 遗憾的是,这是在PHP 5.1上实现的。MySQL日期函数:如何在PHP或MySQL中查找日期是否符合时间间隔?,php,mysql,datetime,intervals,Php,Mysql,Datetime,Intervals,假设我有一个约会时间,2011年6月16日7:00。我希望能够在2011年8月5日7:00检查,并且能够判断它是第一个日期后1天的倍数,而7:01不算,因为它不是一个精确的倍数 另一个测试集:假设我们有2011年6月16日的7:00,我想检查一下,从那以后,某一分钟是否正好在2小时的间隔内。所以9:00、11:00、13:00等都算,但9:30和10:00不算。这可能会持续几天甚至几个月——9月1日7:00仍然算是每2小时一次。(不,目前我不知道如何处理DST:D) 我想了一会儿,想不出PHP或
最简单的方法是将日期/时间值转换为unix时间戳,然后简单地执行一些减法/除法:
2011-06-16 07:00:00 -> 1308229200
2011-08-05 07:00:00 -> 1312549200
2011-08-05 07:00:01 -> 1312549201
1312549200 - 1308229200 = 4320000 / 86400 = 50 (days)
1312549201 - 1308229200 = 4320001 / 86400 = 50.0000115...
换句话说:
if (($end_timestamp - $start_timestamp) % 864000)) == 0) {
... even multiple ...
}
这同样适用于日/周比较。对于几个月来说,这将是不可能的,因为几个月甚至连数字都不好处理。您可以通过方法比较两个DateTime对象。结果是一个对象-您可以检查两个日期之间的确切天数/小时/分钟数 如果可以使用内置功能,那么编写自己的算法是无用的
select *
from test
where datetimefield > '2011-06-16 07:00:00'
and
mod(timestampdiff(second,'2011-06-16 07:00:00',datetimefield),7200) = 0
此示例将提供大于“2011-06-16 07:00:00”的所有记录,其中字段正好是2小时的倍数。Oho,这是一个好的观点。7:00永远是7:00,等等。但是,如果我说,6月15日,早上7点,我想每隔5小时打一个勾。单数,因此6月16日上午7点不符合条件。:)希望能在这几个月里。。。嗯。不过,这其实很简单:只需查看一个月的哪一天。如果相等,运行它。不要让他们把事情安排在29日、30日或31日,没有简单的“月的最后一天”的附加选项:)如果这是预订系统,并且您想限制这些类型的时间间隔,那么就不允许任意输入日期。让脚本弹出只列出允许间隔的下拉列表。不幸的是,我很抱歉没有在我的帖子中包括这一点,但我目前被困在PHP5.1中。你应该要求PHP5.3。2011年的5.1只是在浪费时间。哦,我有。但是我们被限制在RHEL5.1上,不管它是什么,它只正式支持PHP5.1。(它有5.3,但没有我们想要的插件)Timestampdiff!我们好像赢了!