Я получу случайное количество секунд, которое число может превышать 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сек Что не так в моем коде?
Я не разбил ваш код на части, чтобы выяснить, в чем дело, но я считаю, что это решает проблему.
$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";
echo gmdate("H:i:s", 39540);
использовать этот
Я изменил код, чтобы проверить, равно ли значение секунд 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";
Эй, вы можете сделать это с помощью вычисления по модулю:
$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сек