Я пытаюсь сделать десятичное число и преобразовать его, чтобы я мог повторять его как часы, минуты и секунды.
У меня есть часы и минуты, но я ломаю голову, пытаясь найти секунды. Некоторое время бегали по поисковому запросу. Я уверен, что это довольно просто, но я ничего не пробовал. Любые советы приветствуются!
Вот что я имею:
function convertTime($dec) { $hour = floor($dec); $min = round(60*($dec - $hour)); }
Как я уже сказал, я получаю час и минуту без проблем. Просто пытаюсь получить секунды по какой-то причине.
Благодаря!
Если $dec
находится в часах ( $dec
так как апелляционный суд указал конкретно на dec imal):
function convertTime($dec) { // start by converting to seconds $seconds = ($dec * 3600); // we're given hours, so let's get those the easy way $hours = floor($dec); // since we've "calculated" hours, let's remove them from the seconds variable $seconds -= $hours * 3600; // calculate minutes left $minutes = floor($seconds / 60); // remove those from seconds as well $seconds -= $minutes * 60; // return the time formatted HH:MM:SS return lz($hours).":".lz($minutes).":".lz($seconds); } // lz = leading zero function lz($num) { return (strlen($num) < 2) ? "0{$num}" : $num; }
Очень простое решение в одной строке:
echo gmdate('H:i:s', floor(5.67891234 * 3600));
Все, что было предложено, не работало в моем случае. Я использовал это решение для преобразования десятичных часов и минут в обычный формат времени. т.е.
function clockalize($in){ $h = intval($in); $m = round((((($in - $h) / 100.0) * 60.0) * 100), 0); if ($m == 60) { $h++; $m = 0; } $retval = sprintf("%02d:%02d", $h, $m); return $retval; } clockalize("17.5"); // 17:30
Я не уверен, что это лучший способ сделать это, но
$variabletocutcomputation = 60 * ($dec - $hour); $min = round($variabletocutcomputation); $sec = round((60*($variabletocutcomputation - $min)));
Это отличный способ и позволяет избежать проблем с точностью с плавающей запятой:
function convertTime($h) { return [floor($h), (floor($h * 60) % 60), floor($h * 3600) % 60]; }