我試圖計算服務的持續時間,以獲得結束時間。每項服務的持續時間值以分鐘爲單位,其中包括:30
,40
,50
。如果整個小時內倒計時,或者如果它在php中執行整整一個小時?
每場會議都是在整整一個小時開始(例如11:00,12:00,13:00)。
如果總持續時間落在整整一個小時內(例如12:00,13:00和14:00),它應該設置爲前一小時和59分鐘(例如11:59,12:59, 13:59)。例如,如果選擇兩個30分鐘的服務,則會發生這種情況。
但是,如果它通過一小時,說結束時間是12:20或13:30,那麼結束時間應設置爲12:59或13:59。
這裏是我到目前爲止的代碼:
$startTime = $_POST['datetime']; // (2015-09-09 11:00)
# calculate total duration of services in order to get end time
foreach($_POST['service'] as $service){
list($service_id,$service_duration) = explode(';',$service); // values stored as id;duration
$service_ids[] = (int)$service_id; // new array with ids
$services_duration_total += (int)$service_duration; // in minutes
}
//
# calculate end time
$endTime_actual = getdate(strtotime('+'.$services_duration_total.' minutes', strtotime($_POST['datetime']))); // actual end time
這個方法我試過:
$endTime_offset = (60-$endTime_actual['minutes'])-1; // calculate munutes left in the hour
$endTime = date('Y-m-d H:i',strtotime('+'.$endTime_offset.' minutes',$endTime_actual[0])); // new end time
這工作如果總時間超過60分鐘,但如果它恰好是60分鐘,或120或180,因爲它然後登陸一整小時。在這些情況下,正如我所提到的,我需要腳本來回滾到最後一小時,並且59分鐘。
我不確定我是否正確解釋了這一點,但希望你能得到我想要完成的工作..
這似乎工作。我必須在'date'函數的最後兩個參數中添加'strtotime',但是在這之後,我運行了幾個不同的測試。看起來不錯。謝謝你的時間。 – ThomasK
哦,我意外地從代碼中刪除了strtotime,現在修復了這個問題。 –
btw。爲什麼'-1秒'?由於我在分鐘內工作,使用'-1分鐘'會有什麼效果嗎?只是出於好奇.. – ThomasK