我的表格中有一个日期时间列,并且在查找之间执行。
这是来自我的表(事件)的示例数据
id owner date
1 formA 2014-11-10 15:45:00
2 formB 2014-11-14 16:00:00
3 formC 2014-11-17 19:30:00
4 formD 2014-11-19 21:10:00
5 formE 2014-11-20 12:10:00
我想展示今天的活动和2天前发生的事件。 今天 - 2天。
为了满足我的需要,我需要找到今天最大可能的时间价值。
假设当前时间是2014-11-20 11:00:00,
我需要找到那个时间的最大值,即2014-11-20 23:59:59所以我可以包括今天的整个查询时间。
同样的事情适用于当天的日子。
2014-11-20 11:00:00 - 2天等于2014-11-18 11:00:00。
所以我需要找到时间的最小可能值,即2014-11-18 00:00:00,以便从头开始包括那一天。
我可以通过以下程序来实现,但实施起来还很长。
// current date
$end_date = new DateTime(date("Y-m-d"));
$start_date = new DateTime(date("Y-m-d"));
// intervals. (1day - 1second so i can find)
$diff1day = new DateInterval('PT86399S');
$diff2day = new DateInterval('P2D');
// apply intervals
$end_date = $end_date->add($diff1day);
$start_date = $start_date->sub($diff12day);
// format to use in sql query
$end_date = $end_date->format("Y-m-d H:i:s");
$start_date = $start_date->format("Y-m-d H:i:s");
输出上面的代码:
$end_date -> 2014-11-20 23:59:59
$start_date -> 2014-11-18 00:00:00
这正是我需要的。
这种做法好吗? 是否有更短的方法来实现这一目标?
感谢。
答案 0 :(得分:1)
你甚至可以在你的MYSQL查询中解决这个问题:
SELECT * FROM events WHERE date < DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND date > DATE_SUB(CURDATE(), INTERVAL 2 DAYS)
答案 1 :(得分:0)
也许这会对你有所帮助:)。
$date1 = '2014-11-20';
$date2 = '2014-11-18';
$days = ( strtotime($date1) - strtotime($date2)) / (60 * 60 * 24);