在php中查找特定日期/时间的最大值和最小值

时间:2014-11-20 12:13:34

标签: php mysql datetime time

我的表格中有一个日期时间列,并且在查找之间执行。

这是来自我的表(事件)的示例数据

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

这正是我需要的。

这种做法好吗? 是否有更短的方法来实现这一目标?

感谢。

2 个答案:

答案 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);