php - php从午夜获取小时差范围失败
问题描述
我试图从当前时间的午夜开始数小时
那是假设现在是 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 循环有错误,可能有什么问题?
解决方案
我不会使用该代码,而不是解决问题,只需使用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
)
)
推荐阅读
- swift - 在 CarPlay 中,如何使用自定义单元格为音频应用创建表格视图?
- solr - 如何在不同的服务器中复制 solr 分片
- apache-spark - 无法在 spark Sql-Incomplete HDFS URI 中读取临时表
- swiftui - SwiftUI:如果出现 ActionSheet,WebView 会重新加载
- angular - Angular - 多个条件 http 请求
- python - Windows 根据 PDF 文件本身的信息自动命名
- javascript - 将自制库导入vue项目
- sql-server-2008 - 在 SSRS 2008 中,如何在文本框中同时显示多值参数的标签和值?
- javascript - 如何编写 Javascipt 代码为任何字符串的输入创建小于或等于 20 字节的哈希字符串?
- python - 在 python 3 中使用 xor 计算校验和