Модульное деление PHP не вычисляется должным образом — Codepad предоставляется

#php #math #rounding #modulus

#php #математика #округление #модуль

Вопрос:

Я должен получать ровно 72 часа, но это дает мне 72 часа и 12 секунд … почему???

http://codepad.org/KNj44By5

Комментарии:

1. Технически каждый день — это не совсем 24 часа. Вот почему у нас високосные годы.

2. Итак, вы говорите, что этот пример создаст проблему? Я использую это для расчета отработанных часов, и мне нужен был расчет, чтобы добавить общее количество часов за неделю, месяц, что угодно (более 23: 59: 59).

Ответ №1:

Потому что ваша математика неверна. $elapsed будет в секундах, поэтому вам не нужно делить его перед использованием модуля. Что вы действительно получаете, так это модуль часов% 60.

Это будет работать следующим образом:

 $in = strtotime("2011-10-02 23:00:00");
$out = strtotime("2011-10-05 23:00:00"); // 72 hours apart

$elapsed = $out - $in;

$hours = floor($elapsed / 3600);
$minutes = floor(($elapsed / 60) % 60);
   if (strlen($minutes) == "1") { $minutes = "0".$minutes; } // No single digits

$seconds = $elapsed % 60;
   if (strlen($seconds) == "1") { $seconds = "0".$seconds; } // No single digits

$total = $hours.":".$minutes.":".$seconds; // Should be 72:00:00

echo $total
  

Редактировать

Вы также испортили заполнение нулем. Вы превращались 2 в 20 .

Обновленный codepad здесь: http://codepad.org/XY8L9EJ1