我的日期时间格式如下:
开始时间:2017-07-16 20:00
结束时间:2017-07-16 23:30
开始时间:2017-07-18 21:30
结束时间:2017-07-19 00:30
我需要从这些时间间隔告诉我们在18:00-22:00和22:00-06:00之间花费了多少小时(以0,5为增量)一个月。
提前感谢任何提示。
我目前的代码就是这个,但我不确定它是否涵盖了所有时间框架的可能性:
<?php
date_default_timezone_set("UTC");
$start = array(
"2017-07-16 21:30:00",
"2017-07-16 18:00:00"
);
$end = array(
"2017-07-17 00:30:00",
"2017-07-16 18:30:00"
);
$amount_low = 0;
$amount_high = 0;
for($i = 0; $i < sizeof($start); $i++) {
$start_time = date("H:i:s", strtotime($start[$i]));
$end_time = date("H:i:s", strtotime($end[$i]));
$start_date = date("Ymd", strtotime($start[$i]));
$end_date = date("Ymd", strtotime($end[$i]));
// getting chunk before 22:00 if
if(
(strtotime($start[$i]) >= strtotime($start_date . " 18:00") && strtotime($start[$i]) < strtotime($start_date . " 22:00"))
&&
$start_date < $end_date
) {
$interval_low = strtotime($start_date . " 22:00") - strtotime($start[$i]);
$amount_low += ceil($interval_low / 1800) / 2;
}
//amount_high
if(strtotime($start[$i]) > strtotime($start_date . " 22:00") && strtotime($start[$i]) < strtotime($start_date . " 06:00")) {
$interval_high = strtotime($end[$i]) - strtotime($start[$i]); //needs further things
$amount_high += ceil($interval_high / 1800) / 2;
} elseif (strtotime($start[$i]) < strtotime($start_date . " 22:00") && strtotime($end[$i]) > strtotime($start_date . " 22:00")) {
$interval_high = strtotime($end[$i]) - strtotime($start_date . " 22:00");
$amount_high += ceil($interval_high / 1800) / 2;
} else {
$interval_low = strtotime($end[$i]) - strtotime($start[$i]);
$amount_low += ceil($interval_low / 1800) / 2;
}
}
echo $amount_low;
echo "\n$amount_high";
?>
答案 0 :(得分:0)
我相信您的解决方案的一部分来自here
Aillyn您可以将它们转换为时间戳并从那里开始:
$hourdiff = round((strtotime($time1) - strtotime($time2))/3600, 1);
除以3600,因为一小时内有3600秒并使用round() 避免有很多小数位。
$hourdiff = round((strtotime($time1) - strtotime($time2))/3600, 1);
这将为您提供两次之间的小时差异。您可以执行类似的操作,只需为每个月的间隔应用它并调整数学。你可以调用它来解决这个问题,但它并不是真正的单一PHP函数。
答案 1 :(得分:0)
这对你有用吗?
$start = strtotime('2017-07-16 20:00');
$end = strtotime('2017-07-16 23:30');
$interval = $end - $start;
$hours = floor($interval / 1800)/2;
echo($hours);
这将显示两个日期之间的总小时数(以0,5为增量)(四舍五入,如果是55分钟,则为0.5小时;将'floor'替换为'ceil',相反)。< / p>