#php #math #time
#php #математика #время
Вопрос:
Я беру общее количество минут и пытаюсь рассчитать общее количество часов и минут.
Если вы:
$elapsed = "6476"; // Trying to get 107:56 (107 hours, 56 min)
if ($elapsed > 60) { $format = "i:s"; }
if ($elapsed > 3600) { $format = "H:i:s"; }
$showdiff = gmdate($format, $elapsed);
Проблема в том, что это не работает для вычислений выше 23 часов 59 минут.
Итак, вы можете выполнить простое деление:
$elapsed = $elapsed / 60; // total hours
Только тогда вы получите дробь (в данном случае 107,933333333). Мне нужно сохранить это как часы и минуты. Есть предложения?
Комментарии:
1. Вы хотите отображать нули (т.Е. 0 часов или 0 минут) или удалять их из строки?
Ответ №1:
Вы должны иметь возможность использовать разделение (как вы заявили) и разделение по модулю для достижения того, чего вы хотите.
$hours = floor($elapsed / 60);
$minutes = round(($elapsed / 60) % 60);
echo $hours . "hrs " . $minutes . "min";
Комментарии:
1. Может ли это быть расширено до секунд?
2. Измените
$minutes
на$minutes = floor(($elapsed / 60) % 60)
и добавьте$seconds = round($elapsed / (3600)) % 60);
. Обратите внимание, что ваш первоначальный ввод 6476 выражен в минутах, поэтому вам придется изменить это значение на секунды, чтобы это сработало. Значение3600
составляет 60 секунд в минуту * 60 минут в час.3. И последнее… Я заметил, что если минуты являются четным числом (т.Е. 72 четных часа), секунды путаются, потому что минуты возвращают один 0 вместо 00. Я попытался добавить a ,2 в конце минутного раунда, но это не сработало.
Ответ №2:
вы могли бы попробовать
$elapsed = $elapsed / 60; // total hours (107.933333333)
$parts = explode(".", $elapsed); // split 107.93333 into 2 parts using the . as a separator
$minutes = $parts[1] // $parts[0] is 107, this will be the .9333
$minutes = $minutes * 60 // = 55.99...
$minutes = round($minutes); // round 55.9999 up to 56
$hours = $parts[0];
echo "$hours hrs $minutes mins";
вероятно, можно было бы написать немного лучше, но мое оправдание в том, что я устал 🙂
Это должно дать вам представление и позволить вам делать то, что вам нужно.