如何从数据库中的多个时间条目中添加总时间?

时间:2015-02-13 17:55:13

标签: php mysql datetime

我有一个表,其中包含每个记录的开始和结束日期时间戳和时间计算,如下所示:

start time             end time               time it took
2015-02-11 16:32:57    2015-02-11 17:23:34    0 day 00 hr. 50 min.
2015-02-12 11:59:03    2015-02-12 12:05:53    0 day 00 hr. 6 min. 
2015-02-12 12:33:52    2015-02-12 12:43:22    0 day 00 hr. 9 min. 
2015-02-12 12:43:12    2015-02-13 09:56:08    0 day 21 hr. 12 min.
2015-02-13 09:36:49    2015-02-13 09:53:55    0 day 00 hr. 17 min.

如何获得最早的日期时间和最新的日期时间,以便我可以对这2个日期时间进行计算,以获得所有记录合计的总时间?

我假设最早的日期时间条目将是第一条记录的开始时间,最新的日期时间条目将是最后一条记录的结束时间。

更新

我问错了。我无法选择第一个开始日期时间和最后结束日期时间,因为它会计算起始端对之间的所有时间。我需要把所有花费的时间加起来"条目。怎么做的?

如果它在几秒钟内更容易存储,那么转换页面,让我知道,然后提供该方法的解决方案。感谢。

另一次更新

因此,在将数据库中的所有时间数据更改为秒后,我使用以下内容来获取所需内容。有时(实际上很多次)当人们给出答案时,他们会给出很少的代码片段,并且没有详细说明或提供有关如何使用所述片段的示例。例如,SUM(时间)本身没有任何作用,我也不知道如何实现它。我需要出去搜索如何使用它,以下是我发现的。在旁注,不知道什么是问答网站,如果我必须去其他地方寻找扩展(更详细)的代码。

$result = mysql_query("SELECT SUM(time) AS time_sum FROM table WHERE jobnum='".$jobnum."'"); 
$row = mysql_fetch_assoc($result); 
$sumoftime = $row['time_sum'];
//echo $sumoftime; //as seconds
echo secondsToWords($sumoftime); //as words with days, hours, minutes, and seconds from a separate function

单独的功能:

function secondsToWords($seconds) {
$ret = "";

/*** get the days ***/
$days = intval(intval($seconds) / (3600*24));
if($days> 0) {
    $ret .= "$days days ";
}

/*** get the hours ***/
$hours = (intval($seconds) / 3600) % 24;
if($hours > 0) {
    $ret .= "$hours hours ";
}

/*** get the minutes ***/
$minutes = (intval($seconds) / 60) % 60;
if($minutes > 0) {
    $ret .= "$minutes minutes ";
}

/*** get the seconds ***/
$seconds = intval($seconds) % 60;
if ($seconds > 0) {
    $ret .= "$seconds seconds";
}

return $ret;
}

1 个答案:

答案 0 :(得分:0)

我会做以下事情:

$stmt = "select
start_time,
end_time
from times
";

// Add all results to an array

// Loop through the array of start and end times
foreach($times as $time) {
    $total += (new \DateTime($time['end_time']))->getTimestamp() - (new \DateTime($time['start_time']))->getTimestamp();
}

// Get Hours, minutes and seconds
$hours = floor($total/3600);
$total -= $hours * 3600;
$minutes = floor($total/60);
$total -= $minutes * 60;
$seconds = floor($total);

// Output
echo "{$hours}h {$minutes}m {$seconds}s";