Как получить общее количество минут для отображения в Xhrs, Xmin?

#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";
  

вероятно, можно было бы написать немного лучше, но мое оправдание в том, что я устал 🙂

Это должно дать вам представление и позволить вам делать то, что вам нужно.