【问题标题】:PHP/ MySQL Milliseconds to Hours:Minutes:SecondsPHP/ MySQL 毫秒到小时:分钟:秒
【发布时间】:2015-04-08 01:08:16
【问题描述】:

我的任务是为我们服务器的一种游戏模式制作一个统计“查看器”。它一直很好,但我唯一的问题是将播放时间转换为小时:分钟:秒。

制作实际游戏模式的开发者会在 MySQL 中以毫秒为单位存储游戏时间。可悲的是,许多玩家有足够的时间很容易导致整数溢出(在 PHP 中计算时)。

现在,我想知道解决此问题的最简单和最有效的方法是什么。在我不知道的 MySQL 查询中是否有执行此操作的方法?

【问题讨论】:

  • 如果你想使用 mySQL,DATE_FORMAT 和 SEC_TO_TIME 函数会解决这个问题
  • 所以我假设我必须将毫秒除以 1000 才能使用 SEC_TO_TIME?
  • 对我来说似乎是一个合理的假设

标签: php mysql integer-overflow


【解决方案1】:

假设你有 36001316000 毫秒:

SET @miliseconds = 36001316000;
SET @s = @miliseconds / 1000; 
SET @hours = FLOOR(@s / 3600);
SET @minutes = FLOOR(@s / 60 - @hours * 60); 
SET @seconds = ROUND(@s - @hours * 3600 - @minutes * 60);

SELECT @hours, @minutes, @seconds;

这将返回 10000 小时 21 分 56 秒。

您将如何存储这些信息取决于您将如何使用它。如果只是为了提供信息,或者基于 PHP 的计算,你可以将它存储在 varchar 中,如果你需要在 MySQL 中基于它进行计算,你可以将它存储在 3 个不同的整数字段中。

【讨论】:

    【解决方案2】:

    什么是列类型?整数?

    将整数更改为无符号整数将使最大数加倍。

    轻松解决:

    将该列的表结构从INT 更改为BIGINT

    如果已经是 BIGINT,则将现有记录除以 1000 并使用秒。
    示例:
    或者将现有记录除以 60000 并使用分钟。

    $sql = "更新users 设置time = time / 60000";

    【讨论】:

    • 列类型为 BIGINT。不过这无关紧要,我只需要将其转换为用户友好的形式。
    • 你可以使用 DECIMAL(254,0),用户永远不会活那么多毫秒。
    猜你喜欢
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2018-11-16
    • 2018-12-25
    • 1970-01-01
    • 2013-01-12
    相关资源
    最近更新 更多