strtotime 7天前,整个24小时工作日

时间:2015-07-20 18:47:22

标签: php datetime time strtotime

我需要能够创建两个时间点:

  1. 7天前从今天开始(上午12:00)
  2. 7天前从今天结束(晚上11:59)
  3. 我开始了,但它没有产生我需要的东西:

    $starting_time = new DateTime('today');
    $starting_time->modify('-7 day -1 second');
    
    $ending_time = new DateTime('today');
    $ending_time->modify('-8 day -1 second');
    

    我需要它们都是完全格式化的时间戳: 2015:07:14 15:51:12

    最终目标是能够执行SQL查询以检查24小时内的日期,如下所示:

    whereBetween('mytable.expiry_date', array($starting_time, $ending_time))
    

3 个答案:

答案 0 :(得分:0)

试试这个

$start = new DateTime();
$start->setTime(0,0,1); 
$end = clone $start;  // or just make new DateTime;
$end->modify( '-7 day' );
$start->setTime(23,59,59);

但正如其他人在查询数据库时所指出的那样,你应该只使用DATE()函数,它更简单,更健壮,更容易阅读和理解代码的意图。

答案 1 :(得分:0)

根据评论请求:

考虑如果你在日常变换中运行两个new Date()会发生什么:

11:59:59pm -> new Date('today') -> $start = Jul 20, 2015 11:59:59pm
12:00:02am -> new Date('today') -> $end   = Jul 21, 2015 12:00:02am

$start -> -7 days -1 second -> Jul 13, 2015 11:59:58pm
$end ->   -8 days -1 second -> Jul 13, 2015 12:00:01am

"糟糕"

有点人为的例子,但从来没有假设今天'将在计划中保持不变。

答案 2 :(得分:0)

您可以在7天前获取日期,并将00:00:00和23:59:59追加到它。

喜欢

$ start_time = $ date_7days_ago。 " 00:00:00&#34 ;; $ end_time = $ date_7days_ago。" 23:59:59";

这对您正在查看的查询完全正常。