【问题标题】:find max&min possible value of specific date/time in php在php中查找特定日期/时间的最大和最小可能值
【发布时间】: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:0023:59:59。你真的需要计算这些吗?
  • 好吧,其实我没有。我第一次实现它时对时间字符串进行了硬编码。但我试图避免在我的项目中使用硬编码的东西。这就是为什么我正在寻找一种本地方式来完成它。不管怎么说,还是要谢谢你。 :)
  • 我不认为一天的开始和结束的时间会改变。

标签: php mysql datetime time


【解决方案1】:

也许你甚至可以在你的 MYSQL 查询中解决这个问题:

SELECT * FROM events WHERE date < DATE_ADD(CURDATE(), INTERVAL 1 DAY) AND date > DATE_SUB(CURDATE(), INTERVAL 2 DAYS)

【讨论】:

  • 我已经测试了您的解决方案,它的表现非常好。谢谢! BETWEEN 有点快,但在我的环境中并不重要。它也无法捕捉“2天前”的起始值,这也没关系。 (2014-11-18 00:00:00,应该是 +1 毫秒才能被查询捕获。-> 2014-11-18 00:00:01
【解决方案2】:

也许这对你有一点帮助:)

$date1 = '2014-11-20';
$date2 = '2014-11-18';

$days = ( strtotime($date1) - strtotime($date2)) / (60 * 60 * 24);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多