Mysql – 秒差异意外结果

我需要计算两个日期之间的秒数差异.由于它的limitations,我不能使用TIMEDIFF.

我用的时候:

SELECT UNIX_TIMESTAMP('2015-03-28 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');

它返回预期的86400秒(什么给出24小时)但是当我使用时:

SELECT UNIX_TIMESTAMP('2015-03-29 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');

它似乎不给86400 * 2而是169200而不是47小时.

问题是 – 为什么?这是一个错误或功能吗?有没有其他合理的方法来计算时差而不用担心时间限制?

最佳答案
有几种方法可以解决这个问题:

随着UNIX_TIMESTAMP()
 在执行日期操作之前使用SET SESSION time_zone =’0:00′.

SET SESSION time_zone = '+0:00';
SELECT UNIX_TIMESTAMP('2015-03-29 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');

这返回172800,即48小时的适当时差.
Demo.

 

随着TIMESTAMPDIFF()
 如果您不想使用SET SESSION time_zone,可以尝试TIMESTAMPDIFF()

SELECT UNIX_TIMESTAMP('2015-03-29 08:21:15') - UNIX_TIMESTAMP('2015-03-27 08:21:15');
SELECT TIMESTAMPDIFF(SECOND, '2015-03-27 08:21:15', '2015-03-29 08:21:15');

第一次计算结果为169200(即47小时),第二次计算结果为172800(即48小时).
请记住,应该先在TIMESTAMPDIFF()中使用较小的时间戳,否则会得到否定的结果.或者,您可以在ABS()下包装TIMESTAMPDIFF(),如下所示:

SELECT ABS(TIMESTAMPDIFF(SECOND, '2015-03-29 08:21:15', '2015-03-27 08:21:15'));

Rextester link.

转载注明原文:Mysql – 秒差异意外结果 - 代码日志