我想要做的是,在一小时前,一小时前显示最后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
我怎么能得到它?
答案 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";
}