代码之家  ›  专栏  ›  技术社区  ›  Marcin Nabiałek

mysql-秒差意外结果

  •  4
  • Marcin Nabiałek  · 技术社区  · 7 年前

    我需要计算两个日期之间的秒数差。我不能使用TimeDiff,因为它 limitations .

    当我使用时:

    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小时。

    问题是-为什么?它是一个bug还是特性?有没有其他合理的方法来计算时差而不担心时间限制?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Dhruv Saxena    7 年前

    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
    Demo


    TIMESTAMPDIFF()

    SET SESSION time_zone

    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 hours

    ABS()

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

    Rextester link.

        2
  •  3
  •   Kirill Staruhin    7 年前