【问题标题】:Computing average time given set of start and end dates计算给定开始和结束日期的平均时间
【发布时间】:2011-03-27 23:20:17
【问题描述】:

我有一个表,其中有一个名为date_start 的字段和一个名为date_end 的字段,该字段的值是这样的

year-month-day hours:minutes:seconds

我需要知道:

  • 这个人完成任务需要多少时间。
  • 所有这些的平均时间。

我还是有点新,老实说,我什至不知道从哪里开始。

感谢大家的帮助。

【问题讨论】:

  • @JYelton 抱歉我修改了你的修改!

标签: php mysql date


【解决方案1】:

假设 MySQL 中的字段是 TIMESTAMP 或 DATETIME,我将使用两个 MySQL 查询。一为任务具体结果。

SELECT UNIX_TIMESTAMP(date_end) - UNIX_TIMESTAMP(date_start)  AS seconds_to_complete_task
FROM a

一个代表平均结果。

SELECT AVG(UNIX_TIMESTAMP(date_end)-UNIX_TIMESTAMP(date_start)) AS avg_seconds_to_complete_task
FROM a

【讨论】:

    【解决方案2】:

    从这里开始:strtotime() 此函数会将您的时间转换为表示自 1970 年以来的秒数的数字。然后您可以从另一个中减去一个以找到经过的秒数。

    http://us3.php.net/strtotime

    【讨论】:

    • 如果应用程序进入第二天会怎样说 date_start = 2009-01-13 18:53:28 date_end= 2009-01-14 14:39:10
    • srtotime("$date_start"); strotime("$date_end");那还能给我多少秒吗?
    • $num_seconds = strtotime($date_end) - strtotime($date_start);
    【解决方案3】:

    我还没有测试过,但这会起作用:

    SELECT (UNIX_TIMESTAMP(date_end) - UNIX_TIMESTAMP(date_start)) AS personal_complete_time, 
    AVG(UNIX_TIMESTAMP(date_end) - UNIX_TIMESTAMP(date_start)) AS total_average 
    FROM mytable
    

    您将获得完成的平均秒数

    【讨论】:

      【解决方案4】:

      您说您有一个表格,其中的日期存储格式如下:年-月-日时:分:秒。

      您确定您没有使用日期时间字段吗?如果是这样,那就解决了一半的问题。日期时间字段以这种方式表示。

      【讨论】:

        【解决方案5】:

        这将起作用:

        $total_time_worked = 0;
        foreach( $db_records as $time_entry )
        {
            $start = strtotime($time_entry['date_start']);
            $end = strtotime($time_entry['date_end']);
        
            // Time worked (in seconds)
            $worked = $end-$start;
        
            // Increment the total
            $total_time_worked += $worked;
        }
        
        // Get the average time worked (in seconds)
        $average = $total_time_worked/count($db_records);
        

        【讨论】:

        • 无论数据集的大小如何,将工作放到 MySQL 中几乎肯定更明智。如果数据集很大,这可能会导致性能很差。
        猜你喜欢
        • 1970-01-01
        • 2012-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        相关资源
        最近更新 更多