【问题标题】:MySQL TIME stamp to days, hoursMySQL时间戳到天,小时
【发布时间】:2012-02-17 16:30:40
【问题描述】:

在查看 MySQL 文档时,我没有在 DATE_FORMAT(由 TIME_FORMAT 引用)下找到将 MySQL TIME 值(例如:172:04:11)转换为“7 天 4 小时”之类的选项。

有没有办法(在 MySQL 中)以这种方式格式化时间?还是我应该只对 PHP 中返回的 TIME 值进行操作?

【问题讨论】:

  • 使用 TIME_TO_SEC 返回总秒数可能更容易,然后让 PHP 轻松计算出天数和小时数。
  • @aaron-w.,我最终得出了这个结论。糟透了 MySQL 在 838:59:59 截断时间戳。恕我直言,不应该有限制。无论如何 - 我正在使用 TIMESTAMPDIFF(SECOND,date_old,date_newer) 来获取秒数。

标签: php mysql time date-format


【解决方案1】:

我讨厌不得不回答自己的问题,但是为了澄清问题,MySQL 的 TIME() 函数会截断超过 838:59:59 的值 - 显然是不可取的。

我找到的解决方案是使用这个:

TIMESTAMPDIFF(SECOND,date_old,date_newer) 

没有相同的截断问题。一旦你有了秒数,就可以使用一些服务器端脚本来格式化时间,就像我原来的请求一样。如果您想查看 PHP 中的示例,请回复,或编写您自己的示例。 :)

希望这有帮助吗?

【讨论】:

    【解决方案2】:

    TIME 类型的变量最有可能用于表示时间间隔,您可以使用addtime() 函数将此时间间隔添加到给定的DATETIME 类型变量中。

    SELECT ADDTIME( NOW(), '172:04:11' );
    

    按预期工作,但是如果您需要将此时间间隔显示为天和小时,只需使用:

    SELECT CONCAT( 
      FLOOR(HOUR('172:04:11')/24), 
      ' days, ',
      HOUR('172:04:11') MOD 24, 
      ' hours.');
    

    【讨论】:

    • 这适用于高达 838:59:59 的时间戳。 MySQL 会截断大于该值的 TIME 值。
    【解决方案3】:
    SELECT CONCAT( FLOOR(TIME_FORMAT('172:04:11', '%H')/24), ' days ', (TIME_FORMAT('172:04:11', '%H') MOD 24),   ' hours ', TIME_FORMAT('172:04:11', '%i'), ' minutes ', TIME_FORMAT('172:04:11', '%s'), ' seconds')
    

    【讨论】:

    • 这仅适用于高达 838:59:59 的时间戳。 MySQL 会截断大于该值的 TIME 值。尝试使用 999:59:59... 然后 1999:59:59... 都返回 34 天 22 小时 59 分钟 59 秒。
    猜你喜欢
    • 2021-05-20
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多