2015-04-08 2 views
1

Мне поручено создавать статистику для одного из игровых режимов нашего сервера. Это было замечательно, но единственная проблема, с которой я столкнулся, - это время, затрачиваемое на часы: минуты: секунды.PHP/MySQL Miliseconds to Hours: Minutes: Seconds

Разработчик, который создал настоящий игровой режим, хранит время, проведенное в MySQL в миллисекундах. К сожалению, у многих игроков достаточно времени, чтобы легко вызвать целочисленное переполнение (при вычислении в PHP).

Теперь, мне интересно, какой самый простой и эффективный способ решить эту проблему. Есть ли способ сделать это в запросе MySQL, о котором я не знаю?

+0

Если вы хотите использовать mySQL, функции DATE_FORMAT и SEC_TO_TIME разрешат это –

+0

. Поэтому я предполагаю, что мне нужно будет разделить миллисекунды на 1000, чтобы использовать SEC_TO_TIME? – mattrick

+0

кажется звуковым предположением для меня –

ответ

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 на основе этого, вы можете сохранить его в трех разных целочисленных полях.

+0

Спасибо, это сработало :) – mattrick

0

Что такое колонка Тип? Integer?

Изменение целого числа на Unsigned Integer удваивает максимальное число.

Простой выход:

Изменение структуры таблицы для этого столбца из INT в BIGINT.

Если уже BIGINT, разделите существующие записи на 1000 и используйте секунды.
Пример:
Или разделите существующие записи на 60000 и используйте минуты.

$ sql = "ОБНОВЛЕНИЕ users SET time = time/60000";

+0

Тип столбца BIGINT. Однако это не имеет значения, мне просто нужно преобразовать его в удобную для пользователя форму. – mattrick

+0

Вы можете использовать DECIMAL (254,0), пользователи никогда не будут жить столько миллисекунд. – Misunderstood

Смежные вопросы