[英]PHP hour calculation on 15 minutes interval and working hours in array never add up
我有一個開始時間和結束時間,它們總是在一個小時:00或:15,:30,:45上開始或結束。
例如:
00:30 21-05-2012 // startdate and time
18:15 22-05-2012 // enddate and time (+1 day)
如果時間到了晚上或晚上,我必須多收%。
因此,我有2個數組,看起來像這樣,一個在晚上,一個在晚上。
$eveningHours = array(
'18:00',
'18:15',
'18:30',
// etcetera
'00:00'
);
上面的數組基本上涵蓋了從18:00-00:00的時間,因為這些時間已經變成了傍晚時間。
夜間同樣如此,它們覆蓋的時間為00:00-07:00。
由於開始時間和結束時間始終精確到:00或:15,:30,:45。。我在開始日期時間和結束日期時間之間以15分鍾的間隔運行一個循環,然后在每個間隔上檢查是否當前的間隔時間是晚上/晚上,然后將+15加到晚上/晚上的小時計數器,最后我將其除以60得到總時數。
但是不知何故,它總是要花15分鍾到15分鍾甚至不到15分鍾的時間...我已經嘗試了幾乎所有內容,但無法使其正常工作。
因此,例如開始時間為00:30,它已經為第一個間隔增加了15分鍾:
00:30(計數器:+15)00:45(計數器:+15)
總共需要30分鍾,但是如果您從00:30到00:45上班,則應該只有15分鍾。.所以我認為那是哪里出錯了。 我只需要一種方法來解決它。我已經嘗試過很多事情,以-15分鍾啟動計數器,或者檢查開始或結束時間是否在一個小時范圍內,然后將計數器設置為-15或+ 15分鍾..但這也出錯。
編輯這是循環的基礎:
$start_time = mktime($_POST['worked_start_hour'], $_POST['worked_start_min'], 0, date("m"), date("d", strtotime("+1 days")), date("Y")); // +1 day for testing purpose
$end_time = mktime($_POST['worked_end_hour'], $_POST['worked_end_min'], 0, date("m"), date("d", strtotime("+2 days")), date("Y")); // +2 days for testing purpose
$date['start_h_i'] = date("Y-m-d H:i", $start_time); # Start date: yyyy-mm-dd hours:minutes
$date['end_h_i'] = date("Y-m-d H:i", $end_time); # End date: yyyy-mm-dd hours:minutes
$counter['eveningMinutes'] = 0;
$counter['nightMinutes'] = 0;
$eveningHours = array(
'18:00',
'18:15',
'18:30',
'18:45',
'19:00',
'19:15',
'19:30',
'19:45',
'20:00',
'20:15',
'20:30',
'20:45',
'21:00',
'21:15',
'21:30',
'21:45',
'22:00',
'22:15',
'22:30',
'22:45',
'23:00',
'23:15',
'23:30',
'23:45',
'00:00'
);
$nightHours = array(
'00:00',
'00:15',
'00:30',
'00:45',
'01:00',
'01:15',
'01:30',
'01:45',
'02:00',
'02:15',
'02:30',
'02:45',
'03:00',
'03:15',
'03:30',
'03:45',
'04:00',
'04:15',
'04:30',
'04:45',
'05:00',
'05:15',
'05:30',
'05:45',
'06:00',
'06:15',
'06:30',
'06:45',
'07:00'
);
while (strtotime($date['start_h_i']) <= strtotime($date['end_h_i'])) {
if (in_array(date("H:i", strtotime($date['start_h_i'])), $eveningHours)) {
$counter['eveningMinutes'] = $counter['eveningMinutes'] + 15;
}
if (in_array(date("H:i", strtotime($date['start_h_i'])), $nightHours)) {
$counter['nightMinutes'] = $counter['nightMinutes'] + 15;
}
$date['start_h_i'] = date ("Y-m-d H:i", strtotime("+15 minutes", strtotime($date['start_h_i']))); // 15 minutes interval
} // end while
我希望有人可以在這里發光,謝謝!
任何人?
更改此行:
while (strtotime($date['start_h_i']) <= strtotime($date['end_h_i'])) {
對此:
while (strtotime($date['start_h_i']) < strtotime($date['end_h_i'])) {
您遇到的問題是您要更新已經計算完時間的小時數。 因此,以您自己的00:30 - 00:45
: 00:30 - 00:45
為例:
通過改變<=
到<
您刪除第二操作:00:45 <00:45所以加什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.