время — Как преобразовать заданные секунды в часы, минуты, секунды, формат в php пользовательским способом?

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

$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ч 29мин 4сек за $ ts = 80944;
Все хорошо но для $ ts = 39540; выход пришел 10ч 58мин 60сек здесь наступил 60сек, что неправильно. должно получиться как 10ч 59мин 0сек Что не так в моем коде?

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);

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

1

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

    $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';

этот пример будет выводить: 12дней 0ч 1мин 39сек

0
По вопросам рекламы [email protected]