如何计算特定范围内的经过时间?

时间:2014-11-05 15:55:08

标签: php datetime laravel

我有一个Laravel应用程序,它主要为游戏提供后端。这个游戏跨越多天,但每天只有几个小时。理想情况下,我希望时间过去了#34;显示,但我希望该显示只计算游戏中的时间,而不是自开始以来的时间。

例如:此游戏将在周一至周五上午8点至下午3点运行。想象游戏从星期一上午8点开始,如果是星期四上午10点,我希望时间显示显示在23:00:00。

我应该如何存储这些日期时间范围?天数没有上限,因此我无法将它们存储在多维数组中。你会怎么做到这一点?

1 个答案:

答案 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。