4

我需要计算两个日期之间的秒数差异。由于其限制,我不能使用 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 小时。

问题是——为什么会这样?它是错误还是功能?有没有其他合理的方法来计算时差而不用担心时间限制?

4

2 回答 2

3

看起来 2015 年 3 月 29 日夏令时发生了变化,这可能是 2015 年夏令时的原因

于 2018-07-10T07:57:05.353 回答
1

有几种方法可以解决这个问题:

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 hours
演示


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(ie 47 hours),第二个计算结果为 ( 172800ie 48 hours)。

请记住,应该首先使用较小的时间戳TIMESTAMPDIFF(),否则您会得到否定的结果。TIMESTAMPDIFF()或者,您可以这样包装ABS()

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

Rextester 链接。

于 2018-07-11T12:21:46.670 回答