Расчет дней, часов и минут php

Хорошо, поэтому я отправляю в свою базу данных mysql целое число в миллисекундах. Теперь я пытаюсь сделать так, чтобы там было написано: Время игры: 1 день 3 часа 15 минут. Но мне трудно это делать, я просто могу получить минуты, дни и часы, но это будет количество часов, общее количество дней и общее количество минут, а не все вместе. У меня такой код:

$time = $timeRow['time'];    
$seconds = floor($time / 1000);
$minutes = floor($seconds / 60);
$hours = floor($minutes / 60);
$days = round($hours / 24);
$milliseconds = $time % 1000;
$seconds = $seconds % 60;
$minutes = $minutes % 60;
echo'Time Played: '.$days.' days '.$hours.' hours '.$minutes.' minutes';

Может ли кто-нибудь помочь мне это исправить?


person Brandon Tyler Jones    schedule 24.08.2012    source источник
comment
Встаньте на плечи гигантов, используйте PHP DateTime.   -  person moonwave99    schedule 24.08.2012
comment
Вы можете использовать ответ, который я дал здесь   -  person Nir Alfasi    schedule 24.08.2012
comment
@ moonwave99 и как это помогает?   -  person Nir Alfasi    schedule 24.08.2012
comment
@alfasin - это гораздо более гибкий и универсальный класс для работы с отображением / расчетами / манипуляциями даты и времени в PHP.   -  person nickb    schedule 24.08.2012
comment
@nickb Думаю, было бы лучше, если бы он разместил это ссылка   -  person Nir Alfasi    schedule 24.08.2012
comment
@alfasin - создайте DateInterval с миллисекундами, и вы получите, например, все временные подъединицы. Кстати, я разместил основную ссылку на datetime, которая включает как процедурные документы, так и документы в стиле объектно-ориентированного программирования - на выбор читателя.   -  person moonwave99    schedule 24.08.2012
comment
@ moonwave99, тогда вы должны опубликовать ссылку на DateInterval < / a> и скажите, что вы рекомендуете просмотреть все datetime библиотека. Отправка ссылки на библиотеку (в которой, вероятно, ~ 100 элементов) - это слишком модно. Но опять же, может это только я ...   -  person Nir Alfasi    schedule 24.08.2012
comment
@alfasin имеет 5 элементов [4 класса, 1 функция], что соответствует ‹---------------- 100. В любом случае спасибо за сужение ^^   -  person moonwave99    schedule 24.08.2012


Ответы (2)


<?php

$time = $timeRow['time'] / 1000;

$days = floor($time / (24*60*60));
$hours = floor(($time - ($days*24*60*60)) / (60*60));
$minutes = floor(($time - ($days*24*60*60)-($hours*60*60)) / 60);
$seconds = ($time - ($days*24*60*60) - ($hours*60*60) - ($minutes*60)) % 60;

echo'Time Played: '.$days.' days '.$hours.' hours '.$minutes.' minutes '.$seconds.' seconds';

Тест: http://codepad.viper-7.com/WBQQet

person Peter    schedule 24.08.2012
comment
@BrandonTylerJones Да, эти расчеты уже много лет вызывают у меня головную боль :)) - person Peter; 24.08.2012

Вы генерируете каждую переменную из исходного числа, поэтому он сообщает вам, что это 1 день и 35 часов; вместо 1 дня и 11 часов.

Вам нужно начать вычитание значений:

$seconds = floor($time / 1000);
$minutes = floor($seconds / 60);
$hours = floor($minutes / 60);
$days = round($hours / 24);

for ($i = 0; $i < $days; $i++) {
    $hours -= 24;
}

И аналогичный фрагмент кода для часов, минут и секунд.

person andrewsi    schedule 24.08.2012
comment
@PeterSzymkowski - Что ты имеешь в виду? Я знаю, что это не очень эффективно, но он работает и дает то, что кажется правильным. - person andrewsi; 24.08.2012
comment
@BrandonTylerJones - А, цикл for должен начинаться с 0 - person andrewsi; 24.08.2012
comment
@PeterSzymkowski - спасибо. Я очень рад, что люди критикуют мой код и говорят мне, что он неправильный, но если вы не скажете почему он неправильный, это действительно не поможет. - person andrewsi; 24.08.2012
comment
Вам придется это оправдать. Я получил неправильное значение цикла for и исправил его. Это далеко от того, что в коде нет логики. Возможно, это не эффективная логика, но она есть. - person andrewsi; 24.08.2012