【发布时间】:2014-11-20 12:13:34
【问题描述】:
我的表中有一个日期时间列,我在查找它之间执行。
这是来自我的表(事件)的示例数据
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,这样我就可以包括今天的整个查询时间。
同样的事情也适用于 -days。
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
这正是我需要的。
这种方法可以吗? 有没有更短的存档方法?
谢谢。
【问题讨论】:
-
我通常只是在我的程序中硬编码字符串
00:00:00和23:59:59。你真的需要计算这些吗? -
好吧,其实我没有。我第一次实现它时对时间字符串进行了硬编码。但我试图避免在我的项目中使用硬编码的东西。这就是为什么我正在寻找一种本地方式来完成它。不管怎么说,还是要谢谢你。 :)
-
我不认为一天的开始和结束的时间会改变。