2014-11-05 83 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.

相关问题