2014-11-05 128 views
0

我有一個基本上爲遊戲提供後端的Laravel應用程序。這個遊戲跨越多天,但每天只有一定的時間。理想情況下,我希望有一個「經過時間」的顯示屏,但我希望顯示屏只計算遊戲中的時間,而不是自啓動以來的時間。如何計算特定範圍內的經過時間?

例如:本場比賽將於週一至週五上午8點至下午3點正常運行。假設遊戲在星期一上午8點開始,如果星期四是上午10點,我希望時間過去的時間顯示爲23:00:00。

我應該如何存儲這些日期時間範圍?天數沒有上限,所以我不能將它們存儲在多維數組中。你會如何處理這個問題?

回答

1
function get_hours_elapsed($day, $hour) { 
    $time_start = 8; // 8am; 
    $time_end = 15; // 3pm 
    $day_start = 1; // Mon 
    $day_end = 5; // Fri 

    $days_elapsed = max(min($day, $day_end) - $day_start, 0); 
    $hours_elapsed = $days_elapsed * ($time_end - $time_start); 

    $hours_elapsed += max(min($hour, $time_end) - $time_start, 0); 

    return $hours_elapsed; 
} 

var_dump(get_hours_elapsed(
    date("N"), // 0 - 6, 0 being Sunday 
    date("G") // 0 - 23 
)); // actual time 
var_dump(get_hours_elapsed(4, 10)); // 10 am on a Thursday 

因爲它是週三下午5點對我來說它打印:

int(21); 
int(23); 

如果時間多星期運行只需添加num_weeks * total_hours_in_week小時。

如果定時器沒有在星期一早上8點開始,則減去小時數。所以,如果它在星期四上午10點開始,減去23.

相關問題