计算给定一组开始和结束日期的平均时间

3

我有一张表格,其中有一个叫做date_start的字段和一个叫做date_end的字段。这两个字段的值如下所示:

year-month-day hours:minutes:seconds

我需要找出:

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

我还是有点新手,实话说我不知道从哪里开始。

感谢你的帮助。


@JYelton 抱歉,我在你的修订上进行了编辑! - Artefacto
5个回答

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

0

这样做会起作用:

$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几乎肯定是更明智的选择。如果数据集很大,否则性能可能非常差。 - Riedsio

0
我还没有测试过,但这应该可以工作:
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

您将获得完成所需的平均秒数


0

你说你有一个以年-月-日 时:分:秒这种格式存储日期的表。

你确定你没有使用datetime字段吗?如果是这样,那么就解决了你问题的一半。Datetime字段就是用这种方式表示的。


0

从这里开始:strtotime()函数将把你的时间转换为一个数字,表示自1970年以来经过的秒数。然后你可以相减得到经过的秒数。

http://us3.php.net/strtotime


如果一个应用程序跨越到第二天,比如 date_start = 2009-01-13 18:53:28 date_end= 2009-01-14 14:39:10 - Karl Lenz
srtotime("$date_start"); strotime("$date_end");这样做还能给我秒数吗? - Karl Lenz
$num_seconds = strtotime($date_end) - strtotime($date_start);$num_seconds = strtotime($date_end) - strtotime($date_start); - Scott Saunders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接