Intereting Posts
скачать прикрепления gmail от php Проверка URL Youtube с использованием Regex Установка Composer в глобальном масштабе для использования laravel? Проблема с подключением базы данных класса PHP Ошибка Hybridauth аутентификации! Facebook вернул неверный идентификатор пользователя Как получить заголовки из последнего перенаправления с функциями curl PHP? Laravel 5.3: Внедрение паспортов – {"error": "invalid_client", "message": "Ошибка аутентификации клиента}} Что-то не так с моим кодом, и я не знаю, что, Добавьте атрибут nofollow для ссылки, если тег заголовка отсутствует с помощью PHP Как установить Sylius на Bluehost или любой другой сервер, на котором установлена ​​старая версия ICU? не удалось повторно задать определенный шаблон Что означает $ this на самом деле> Codeigniter PHP чтение файла cookie Использовать PHP в скрипте для отправки данных также Диспетчер тегов Google Конкатенация файлов RTF в PHP (REGEX)

Как преобразовать десятичную дробь во времени, например. НН: ММ: СС

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

У меня есть часы и минуты, но я ломаю голову, пытаясь найти секунды. Некоторое время бегали по поисковому запросу. Я уверен, что это довольно просто, но я ничего не пробовал. Любые советы приветствуются!

Вот что я имею:

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]; }