我有一个Laravel应用程序,它主要为游戏提供后端。这个游戏跨越多天,但每天只有几个小时。理想情况下,我希望时间过去了#34;显示,但我希望该显示只计算游戏中的时间,而不是自开始以来的时间。
例如:此游戏将在周一至周五上午8点至下午3点运行。想象游戏从星期一上午8点开始,如果是星期四上午10点,我希望时间显示显示在23:00:00。
我应该如何存储这些日期时间范围?天数没有上限,因此我无法将它们存储在多维数组中。你会怎么做到这一点?
答案 0 :(得分: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。