一小时内拿到前八个季度的数据,一小时前



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

我已经有这个了:

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

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

13:45 -
13:30

一首
45
12:30
12:15
12点

我怎么才能得到那个?

<?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

要解决这个问题,您需要弄清楚最后一个季度是什么时候。那就像从那里回去一样简单。我是这样做的:

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

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

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

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"
}

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

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

最新更新