使用mysql和php,每天两个日期和打印秒之间的差异

时间:2015-08-17 10:28:18

标签: php mysql date datetime date-difference

我在mysql中有一些表,包含这样的数据:

id    from                  to
----  --------------------  ---------------------------
1     2013-01-31 23:50:00   2013-02-02 09:00:00
2     2013-02-05 11:21:12   2013-02-08 01:01:01
3     2013-02-08 17:33:44   2013-02-08 18:22:55
4     2013-02-12 01:40:12   2013-02-12 02:00:59
5     2013-02-28 01:40:12   2013-03-02 02:00:59

我需要一个Mysql查询或一个PHP代码来查找'来自'专栏和'到'每行的列,并查找'之间每天有多少秒。和'到'日期分开,例如对于第1行,所需的输出是这样的:

2013-01-31 23:50:00 - 2013-02-02 09:00:00第1行的区别

2013-01-31:600 sec(24:00:00 - 23:50:00 => 600 sec)

2013-02-01:86400 sec(24:00:00 - 00:00:00 => 86400 sec)

2013-02-02:32400 sec(09:00:00 - 00:00:00 => 32400 sec)

依此类推......每一行

首选MySQL命令。哪些代码可以创建此输出?在php或mysql中是否有任何特定的功能来创建这个输出?

我读了这些答案: mysql calculate seconds between two date/times for each day

MySQL: how to get the difference between two timestamps in seconds

但这些不是我的答案。

获取信息: 链接1是一个像我的问题的问题,但答案是不正确的,因为"命令需要按天分组"但是怎么样?! 第二个不是我的问题,但问题一是标记为与链接2重复,但事实并非如此。

1 个答案:

答案 0 :(得分:1)

我假设您有一张日期表。如果是这样,您可以使用join或相关子查询:

select d.date,
       (select sum(timestampdiff(second,
                                 greatest(d.date, t.from),
                                 least(d.date, t.to)
                                ))
        from table t
        where t.to >= d.date and
              t.from < date_add(d.date, interval 1 day)
       ) as NumSeconds
from dates d;

如果您没有某种dates表,可以动态创建一个表:

from (select date('2013-01-31') as date union all
      select date('2013-02-01') union all
      . . .
     ) dates