最近的下一个小时

时间:2014-11-07 23:37:57

标签: php time

我正在寻找一种方法来获得最近的偶数小时和关联日。获得时间天堂确实是一个问题,但是过了一天。

从技术上讲,我只需要在时钟上找到下一个最近的偶数小时,并确定与小时相关的日期,所以如果下一个偶数小时为0,那么它应该提前一天,因为它是一个小时的开始。新的一天。

示例:

  

2014-11-08 22:05:00 - >接下来应该是2014-11- 09 00:00:00

     

2014-11-08 20:35:37 - >接下来最近的应该是2014-11-08 22:00:00(这部分很容易)

最简单的方法是什么? 这是我目前所尝试的,但他们都在午夜挣扎着悲伤地

尝试#1

$date = new DateTime(date('Y-m-d H:i'));
$nextDate = (intval($date->format('H'))+2) % 24;
if ($date->format('H')+2 > 24 || $nextDate == 0)
{
    if($date->format('H')+2 > 24)
        $nextDate = $date->format('H')+2 - ($date->format('H')+2 - 24);
    dd($nextDate);
    $nextDate = date('Y-m-d', strtotime("+1 days")) .' '. $nextDate . ':01';
}
else
    $nextDate = date('Y-m-d') .' '. $nextDate . ':01';

尝试#2

$hours = [0=>2, 1=>2, 2=>4, 3=>4,4=>6,5=>6,6=>8,7=>8, 8=>10, 9=>10, 10=>12, 11=>12,12=>14, 13=>14,14=>16,15=>16,16=>18,17=>18, 18=>20,19=>20,20=>22, 21=>22, 22=>0,23=>0];
if ($hours[date('G')] == 0)
{
    if(date('G') != 0)
        $nextDate = date('Y-m-d') . ' ' . $hours[date('G')] . ':01:00';
    else
        $nextDate = date('Y-m-d', strtotime("+1 days")) . ' ' . $hours[date('G')] . ':01:00';
}
else
    $nextDate = date('Y-m-d') . ' ' . $hours[date('G')] . ':01:00';

1 个答案:

答案 0 :(得分:1)

要实现目标,可以将缺少的时间添加到DateTime对象中:

$dt = new DateTime('2014-11-08 22:05:00');
$sec = $dt->format('G') * 3600 + $dt->format('i') * 60 + $dt->format('s');
$sec %= 7200;
$dt->modify("-$sec second")->modify('+2 hour');
echo $dt->format('c');

demo

小心DST。