Php 如何计算特定范围内的运行时间?

Php 如何计算特定范围内的运行时间?,php,datetime,laravel,Php,Datetime,Laravel,我有一个Laravel应用程序,它基本上为游戏提供了一个后端。这个游戏跨越多天,但每天只有几个小时。理想情况下,我希望有一个“时间流逝”显示,但我希望该显示只计算游戏中的时间,而不是从开始算起的时间 例如:本游戏将在周一至周五上午8点至下午3点正常运行。想象游戏在周一上午8点开始,如果是周四上午10点,我希望时间流逝显示显示为23:00:00 我应该如何存储这些日期时间范围?天数没有上限,因此我无法将它们存储在多维数组中。你将如何处理这个问题 function get_hours_elapsed

我有一个Laravel应用程序,它基本上为游戏提供了一个后端。这个游戏跨越多天,但每天只有几个小时。理想情况下,我希望有一个“时间流逝”显示,但我希望该显示只计算游戏中的时间,而不是从开始算起的时间

例如:本游戏将在周一至周五上午8点至下午3点正常运行。想象游戏在周一上午8点开始,如果是周四上午10点,我希望时间流逝显示显示为23:00:00

我应该如何存储这些日期时间范围?天数没有上限,因此我无法将它们存储在多维数组中。你将如何处理这个问题

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\u weeks*总小时数(单位:周)
hours

如果计时器未在周一上午8点启动,请减去小时数。因此,如果它在周四上午10点开始,减去23