【问题标题】:Counting durations from multiple rows计算多行的持续时间
【发布时间】:2018-08-22 09:04:54
【问题描述】:

我需要调查机器已经运行和待机了多长时间。我在数据库中有这样的条目:

| machine | running | start               |
|---------|---------|---------------------|
| 1       | 0       | 2018-03-13 00:00:00 |
| 1       | 1       | 2018-03-13 00:30:00 |
| 1       | 0       | 2018-03-13 02:00:00 |

时间现在是2018-03-13 04:00:00。使用上述示例时,结果应为01:30:00(运行)和02:30:00(待机)。

进行此类计算的最佳方法是什么?我的数据库条目是否足够好?

我在后端使用 Laravel 和 f.ex 等工具。前端的 Vue 和 Moment.js。提前致谢。

【问题讨论】:

    标签: php mysql laravel time momentjs


    【解决方案1】:

    希望这能解决问题:

    <?php
    
    $rs = [
        [
            'machine' => 1,
            'running' => 0,
            'start' => '2018-03-13 00:00:00'
        ],
        [
            'machine' => 1,
            'running' => 1,
            'start' => '2018-03-13 00:30:00'
        ],
        [
            'machine' => 1,
            'running' => 0,
            'start' => '2018-03-13 02:00:00'
        ],
        [
            'machine' => 1,
            'running' => 1,
            'start' => '2018-03-13 03:00:00'
        ],
    ];
    
    $lastState = -1;
    $startDateTime = $endDateTime = null;
    $totalStates = count($rs);
    
    foreach ($rs as $r)
    {
        $machine = $r['machine'];
        $running = $r['running'];
        $start = $r['start'];
    
        if (-1 === $lastState) {
            $startDateTime = new \DateTime($start);
            $lastState = $running;
        }
        else {
            $endDateTime = new \DateTime($start);
            $dateTimeInterval = $endDateTime->diff($startDateTime);
    
            echo "State: ". $lastState ." / Total time: " . $dateTimeInterval->format("%H:%I:%S") . "\n";
    
            $startDateTime = new \DateTime($start);
            $lastState = $running;
        }
    }
    

    输出:

    State: 0 / Total time: 00:30:00
    State: 1 / Total time: 01:30:00
    State: 0 / Total time: 01:00:00
    

    【讨论】:

      猜你喜欢
      • 2010-09-24
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 2022-08-06
      • 1970-01-01
      • 2021-12-29
      • 2016-01-18
      • 2013-03-07
      相关资源
      最近更新 更多