Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何计算日期差之和?_Php_Mysql - Fatal编程技术网

Php 如何计算日期差之和?

Php 如何计算日期差之和?,php,mysql,Php,Mysql,表中的数据如下所示 ds_start_time -> 09:00:00 , ds_end_time-> 09:30:00 ds_start_time -> 09:00:00 , ds_end_time-> 10:30:00 ds_start_time -> 10:00:00 , ds_end_time-> 10:30:00 ds_start_time -> 09:30:00 , ds_end_time-> 10:30:00 我要的是日期的差异,然

表中的数据如下所示

ds_start_time -> 09:00:00 , ds_end_time-> 09:30:00
ds_start_time -> 09:00:00 , ds_end_time-> 10:30:00
ds_start_time -> 10:00:00 , ds_end_time-> 10:30:00
ds_start_time -> 09:30:00 , ds_end_time-> 10:30:00
我要的是日期的差异,然后求和 为此,我提出了这个问题

SELECT SUM(TIMEDIFF(ds_end_time,ds_start_time)) 
FROM www
WHERE abc='123'........ 
但最后我得到了2058800.000000。从这里我可以得到总小时分和秒。
或任何其他方法。Plz建议。

使用PHP而不是SQL将更容易做到这一点。考虑得到实际的时间,然后循环它们。< /P>
$total = 0;
foreach ($results as $val) {
    $total += strtotime($val['ds_end_time']) - strtotime($val['ds_start_time']);
}

然后使用$total,您就有了执行所需操作的总毫秒数。

使用PHP而不是SQL将更容易做到这一点。考虑得到实际的时间,然后循环它们。< /P>
$total = 0;
foreach ($results as $val) {
    $total += strtotime($val['ds_end_time']) - strtotime($val['ds_start_time']);
}

然后使用$total,您就有了总毫秒数来做您想做的事情。

在MySQL中,如果您知道如何:

SELECT SEC_TO_TIME(SUM
    (TIME_TO_SEC(ds_end_time) - TIME_TO_SEC(ds_start_time))
                 ) AS timediff     
 FROM www 
 WHERE abc = '123'
请注意,如果有许多行具有
abc='123'
,则您可能会得到双重计数,因此您可能需要尝试:

SELECT SEC_TO_TIME(
    (MAX(TIME_TO_SEC(ds_end_time)) - MIN(TIME_TO_SEC(ds_start_time)))
                 ) AS timediff     
 FROM www 
 WHERE abc = '123'

在MySQL中很容易做到这一点,如果您知道如何:

SELECT SEC_TO_TIME(SUM
    (TIME_TO_SEC(ds_end_time) - TIME_TO_SEC(ds_start_time))
                 ) AS timediff     
 FROM www 
 WHERE abc = '123'
请注意,如果有许多行具有
abc='123'
,则您可能会得到双重计数,因此您可能需要尝试:

SELECT SEC_TO_TIME(
    (MAX(TIME_TO_SEC(ds_end_time)) - MIN(TIME_TO_SEC(ds_start_time)))
                 ) AS timediff     
 FROM www 
 WHERE abc = '123'

您使用什么RDBMS?是MySQL吗?使用时间到秒和秒到秒的时间,就像下面的回答:你使用什么RDBMS?是MySQL吗?使用时间到秒和秒到秒的时间,如下面的回答:@user827726试试这个,正如Johan所说,这将是我最好的答案seen@user827726试试这个,约翰说这是我见过的最好的