我正在尝试从当前时间的午夜开始计时
现在应该是02:34,然后我希望得到
02:34 - 02:00,
01:00 - 02:00,
00:00 - 01:00
作为数组
所以我尝试了
function getFromMidnight(){
$durations = [];
$currentTime = strtotime("now");
$iStartOfHour = $currentTime - ($currentTime % 3600);
$midnight = strtotime('today midnight');
$hours = floor(($iStartOfHour - $midnight)/3600);
array_push($durations,["from"=>$currentTime, "to"=>$iStartOfHour]);
if(floor(($iStartOfHour - $midnight)/3600) > 0){
for ($val = 1;$val <= $hours;$val++){
$newval = $val +=1;
array_push($durations, ["from"=>strtotime('- '.$val.' hours',$iStartOfHour),"to"=>strtotime('- '.$newval.' hours',$iStartOfHour)]);
}
}
return $durations;
}
对于第一个数组具有正确的持续时间,例如从上面的示例02:34-02:00开始,但是接下来的数组被弄乱了,给了我带有恒定时间戳的错误值,例如:01:00 - 01:00
我怀疑它的for循环出现错误,这可能是什么问题?
答案 0 :(得分:1)
我不会使用该代码,而不是解决问题,而只需倒转DateInterval并向后工作。然后sub()循环中的小时数以获得偏移量。
<?php
date_default_timezone_set('UTC');
$begin = new DateTime('today midnight');
$end = new DateTime();
$interval = new DateInterval('PT60M');
$interval->invert = 1;
$daterange = new DatePeriod($begin, $interval, $end);
$range = [];
foreach ($daterange as $date){
$range[] = [
'from' => $date->format("H:i"),
'to' => $date->sub($interval)->format("H:i")
];
}
print_r($range);
结果:
Array
(
[0] => Array
(
[from] => 00:00
[to] => 01:00
)
[1] => Array
(
[from] => 01:00
[to] => 02:00
)
[2] => Array
(
[from] => 02:00
[to] => 03:00
)
[3] => Array
(
[from] => 03:00
[to] => 04:00
)
)