Потому что ваша математика неверна. $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
EDIT
Вы также облажались с заполнением нулями. Вы превращали 2
в 20
.
Обновленная кодовая панель здесь: http://codepad.org/XY8L9EJ1