在一小时前一小时内获得前八个季度

时间:2011-12-07 13:51:19

标签: php date time strtotime

我想要做的是,在一小时前,一小时前显示最后8个季度。

我已经有了这个:

<?php
    echo date('d-m-Y H:i:s', strtotime('-1 hour'));
?>

例如:
它现在是14:46(下午2:46),所以我想要的是:

13:45
13:30
13:15
13:00
12:45
12:30
12:15
12:00

我怎么能得到它?

4 个答案:

答案 0 :(得分:2)

<?php
$hour = date('G',(time()-(60*60)));
if (date('i') < 15)
    $min = array('00','45','30','15');
elseif (date('i') < 30)
    $min = array('15','00','45','30');
elseif (date('i') < 45)
    $min = array('30','15','00','45');
else
    $min = array('45','30','15','00');
for ($i=0;$i<=8;$i++) {
    if ($min[$i%4] == 45) {
        if ($hour == 0)
            $hour = 23;
        else 
            $hour--;
    }
    echo $hour.':'.$min[$i%4];
    echo '<br />';
}

现在可以使用,但我还没有进一步测试过。

当地时间:15:06

输出:

14:00
13:45
13:30
13:15
13:00
12:45
12:30
12:15
12:00

答案 1 :(得分:1)

要解决这个问题,你需要弄清楚最后一个季度是什么时候。然后就像从那里回来一样容易。我就是这样做的:

$minute = idate('i');
$qdiff = $minute % 15;
$lastQuarter = time() - $qdiff*60;
echo date('Y-m-d H:i', $lastQuarter);

尝试弄清楚我的代码在做什么。特别是学习如何使用modulo运算符,因为它对一大堆数值问题非常有用!

答案 2 :(得分:1)

或者另一种方式,只是我快速拼凑的东西:

function quarters($date) 
{
    $date = new DateTime($date);
    $date->modify("-1 hour");
    $quarters = array()
    for($i = 0; $i<=7; $i++)
    {
        $nearestQuarter =  floor($date->format("i") / 15) * 15;
        if($i == 0)
        {
            $minuteDiff  = (int) $nearestQuarter - $date->format("i");
            $date->modify(sprintf("%s minutes",$minuteDiff));
        }
        else
        {
            $date->modify("-15 minutes");
        }
        $quarters[] = $date->format("H:i"); 
    }
    return $quarters;
}
var_dump(quarters("2011-12-07 14:46:00"));

输出:

array(8) {
  [0]=>
  string(5) "13:45"
  [1]=>
  string(5) "13:30"
  [2]=>
  string(5) "13:15"
  [3]=>
  string(5) "13:00"
  [4]=>
  string(5) "12:45"
  [5]=>
  string(5) "12:30"
  [6]=>
  string(5) "12:15"
  [7]=>
  string(5) "12:00"
}

答案 3 :(得分:1)

我建议不需要那么多代码来做你需要的代码:

$t = time() - 60 * 60;
$t -= $t % (60 * 15);

for ($i = 0; $i < 8; $i++, $t -= (60 * 15)) {
  echo date('H:i', $t), "\n";
}