2017-01-12 12 views
1

Я получу случайное число секунд, количество которых может превышать 86400, что больше, чем 24 часа (когда конвертируется в часы), поэтому php gmdate() не получит мой требуемый результат. Поэтому я создал следующий код.Как преобразовать заданные секунды в часовые минуты в формате php в обычном режиме?

$ts = mt_rand(36000,99999); 
echo floor($ts/3600)."Hr ".floor(($ts/3600 - floor($ts/3600))*60)."min ".round(((($ts/3600 - floor($ts/3600))*60) - floor(($ts/3600 - floor($ts/3600))*60))*60)."sec"; 

Я получаю выход как 22 ч 29min 4 секунды для $ ц = 80944;
Все в порядке, но для $ ts = 39540; выход пришел 10Hr 58min 60sec здесь 60sec пришел, что не так. он должен выглядеть как 10Hr 59min 0sec. Что случилось в моем коде?

+0

работает нормально: - https://eval.in/714758 –

+0

для '$ ts = 99545;' я получаю ** 27Hr 39min 5sec ** из моего кода, но когда я использовал 'gmdate()' output is ** 3: 39: 05 **, что неверно для моего сценария. – prudhvi259

ответ

1

Я не нарушала свой код на части, чтобы выяснить, что случилось, но я считаю, что это решает проблему.

$ts = mt_rand(36000,99999); 

$h = floor($ts/3600); 
$m = floor(($ts - 3600 * $h)/60); 
$s = $ts - ($h * 3600) - ($m * 60); 

echo $h . "Hr " . $m . "Min " . $s . "s"; 
1
echo gmdate("H:i:s", 39540); 

использовать этот

+0

Прочтите вопрос. Он сказал, что использовал его –

+0

Он работает нормально, если значение секунд меньше 86400 (т.е. 24 часа). но я могу получить 30Hr 24min 30sec что-то вроде этого. Используя 'gmdate()' я не получаю желаемого вывода. Поймите мой вопрос. – prudhvi259

0

Я изменил код, чтобы проверить, если значение секунд в 60, так как он уже caluculated из-за раунд при расчете минут

$ts = 80944; //mt_rand(36000,99999); 

    echo floor($ts/3600)."Hr ". round(($ts/3600 - floor($ts/3600))*60)."min "; 
    echo (round(((($ts/3600 - floor($ts/3600))*60) - floor(($ts/3600 - floor($ts/3600))*60))*60) == 60) ? '0' : round(((($ts/3600 - floor($ts/3600))*60) - floor(($ts/3600 - floor($ts/3600))*60))*60)."sec"; 
0

Эй, вы можете сделать это с расчетом по модулю :

$secondsGiven = 1036899; 
$outputSeconds = $secondsGiven % 60; 
$minutes = ($secondsGiven-$outputSeconds)/60 ; 
$outputMinutes = $minutes % 60; 
$hours = ($minutes - $outputMinutes)/60; 
$outputHours= $hours % 24; 
$outputDays = $outputHours/24; 
echo $outputDays . 'Days ' . $outputHours . 'HR ' . $outputMinutes . 'min ' . $outputSeconds . 'sec'; 

этот пример выведет: 12days 0HR 1min 39sec