代码之家  ›  专栏  ›  技术社区  ›  The.Anti.9

MySQL:如何在几秒钟内获得两个时间戳之间的差异

  •  79
  • The.Anti.9  · 技术社区  · 15 年前

    有没有一种方法可以让我在MySQL中进行一个查询,它可以在几秒钟内给出两个时间戳之间的区别,或者我需要在PHP中这样做?如果是这样,我该怎么做呢?

    4 回复  |  直到 7 年前
        1
  •  139
  •   Community CDub    8 年前

    你可以使用 TIMEDIFF() 以及 TIME_TO_SEC() 功能如下:

    SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff;
    +------+
    | diff |
    +------+
    |   60 |
    +------+
    1 row in set (0.00 sec)
    

    您也可以使用 UNIX_TIMESTAMP() 函数作为 @Amber suggested 在另一个答案中:

    SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') - 
           UNIX_TIMESTAMP('2010-08-20 12:00:00') diff;
    +------+
    | diff |
    +------+
    |   60 |
    +------+
    1 row in set (0.00 sec)
    

    如果您正在使用 TIMESTAMP 数据类型,我想 Unix时间戳() 解决方案会稍微快一点,因为 时间戳 值已存储为整数,表示自epoch以来的秒数。( Source )引用 docs :

    什么时候? Unix时间戳() 在A上使用 时间戳 在列中,函数直接返回内部时间戳值,不进行隐式字符串到Unix时间戳的转换。

    记住 时间区分() return data type of TIME . TIME 值的范围从-838:59:59'到'838:59:59'(大约34.96天)

        2
  •  31
  •   Eaten by a Grue kackleyjm    7 年前

    “TimestampDiff”怎么样?

    SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
    

    https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff

        3
  •  19
  •   Amber    15 年前
    UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)
    

    如果需要无符号差异,请添加 ABS() 围绕表达式。

    或者,您可以使用 TIMEDIFF(ts1, ts2) 然后将时间结果转换为秒 TIME_TO_SEC() .

        4
  •  7
  •   fWd82    8 年前

    请注意 TIMEDIFF() 只有当 datetimes 少于35天 分开! 时间区分() 返回A TIME 数据类型,以及 时间的最大值为838:59:59小时(=34,96天)

    推荐文章