【问题标题】:How do I calculate elapsed time within certain ranges?如何计算特定范围内的经过时间?
【发布时间】:2014-11-06 00:24:21
【问题描述】:

我有一个基本上为游戏提供后端的 Laravel 应用程序。这场比赛跨越多天,但每天只有几个小时。理想情况下,我希望显示“已用时间”,但我希望该显示仅计算游戏中的时间,而不是自开始以来的时间。

例如:此游戏将在周一至周五上午 8 点至下午 3 点正常运行。假设游戏在星期一早上 8 点开始,如果是星期四上午 10 点,我希望经过时间显示为 23:00:00。

我应该如何存储这些日期时间范围?天数没有上限,所以我不能将它们存储在多维数组中。您将如何处理?

【问题讨论】:

    标签: php datetime laravel


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2018-12-28
      • 1970-01-01
      • 2023-03-03
      • 2018-04-15
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      相关资源
      最近更新 更多