可以說我有以下日期範圍:計算時間和給定的時間限制
11:00 2014-01-10 - 2014年1月13日15:00
我也知道,我只能計算09:00至16:00之間的小時數,如何通過PHP實現這一點?但是,上面的日期範圍應該給我25小時(5 + 7 + 7 + 6),不知道這樣的PHP函數應該看起來如何。
可以說我有以下日期範圍:計算時間和給定的時間限制
11:00 2014-01-10 - 2014年1月13日15:00
我也知道,我只能計算09:00至16:00之間的小時數,如何通過PHP實現這一點?但是,上面的日期範圍應該給我25小時(5 + 7 + 7 + 6),不知道這樣的PHP函數應該看起來如何。
我現在已經提出了一個解決方案,但是如果僅僅是一天,我的計算就不會太滿意。這裏是代碼:
$startDate = strtotime("2014-01-22 15:00");
$endDate = strtotime("2014-01-24 18:00");
$time1 = new DateTime(date("H:i", $startDate));
$time2 = new DateTime(date("H:i", $endDate));
$date1 = new DateTime(date("Y-m-d", $startDate));
$date2 = new DateTime(date("Y-m-d", $endDate));
$start = new DateTime("11:00");
$end = new DateTime("18:00");
$maxPerDay = $end->diff($start)->format("%h") != 0 ? $end->diff($start)->format("%h") : 24;
$days = $date2->diff($date1)->format("%a");
$hours = 0;
//Is it just one day and is time intersecting?
if($days == 0 && ($start <= $time2 && $time1 <= $end)){
$hours = $maxPerDay;
if($start < $time1 || $end > $time2){
if($time1 < $start){
$hours = $maxPerDay - $time2->diff($end)->format("%h");
}else if($time2 > $end){
$hours = $maxPerDay - $time1->diff($start)->format("%h");
}else{
$hours = $time1->diff($time2)->format("%h");
}
}
}else if($days > 0){
$firstDay = 0;
$lastDay = 0;
if($time1 < $end){
$firstDay = $time1 < $start ? $maxPerDay : $maxPerDay - $time1->diff($start)->format("%h");
}
if($time2 > $start){
$lastDay = $time2 > $end ? $maxPerDay : $maxPerDay - $time2->diff($end)->format("%h");
}
$hours = $lastDay + $firstDay + ($days - 1) * $maxPerDay;
}
echo $hours;
完全未經測試,沒有任何varatny
<?php
$time1 = new DateTime("11:00");
$time2 = new DateTime("15:00");
$date1 = new DateTime("2014-01-10");
$date2 = new DateTime("2014-01-13");
$start = new DateTime("9:00");
$end = new DateTime("16:00");
$maxperday = $end->diff($start)->format("%h");
$full_day_hours = ($date2->diff($date1)->format("%a")-1)*$maxperday;
$first_day_hours = min($maxperday,max(0,$end->diff($time1)->format("%h")));
$last_day_hours = min($maxperday,max(0,$time2->diff($start)->format("%h")));
$hours = $first_day_hours + $full_day_hours + $last_day_hours;
?>
編輯:現在測試,糾正兩個誤區,似乎現在的工作。
你嘗試過一些東西嗎? –
當然,我設法將日期分成循環中的日期。雖然問題是計算每天給幾個小時。 – Undrium
http://stackoverflow.com/a/3108800/2186023 – DrCopyPaste