Hola,
¿Y porque razón pones a hacer un cálculo con ciclos a una calculadora? Algunas veces se nos olvida que todos los cálculos se pueden realizar matemáticamente, si conocemos bien las matemáticas.
Por ejemplo:
Código PHP:
function diferencia_periodo($a, $z) {
if ($a > $z) return $z;
return (ceil((($z - $a) / 60 / 60) / 6) * 6 * 60 * 60) + $a;
}
No necesitas hacer un ciclo que se repita para saber cual es la diferencia de periodos de 6 horas entre dos números que denotan un instante en el tiempo (el timestamp o tiempo serial de Unix).
Aunque posiblemente así está mas claro:
Código PHP:
define("MINUTOS_POR_HORA", 60);
define("SEGUNDO_POR_HORA", 60);
define("PERIODO_HORAS", 6);
function diferencia_periodo_detalle($a, $z) {
if ($a > $z) return $z;
$r = $z - $a; // LA DIFERENCIA EN SEGUNDOS ENTRE LAS DOS FECHAS
$r = $r / SEGUNDO_POR_HORA / MINUTOS_POR_HORA; // LA DIFERENCIA EN HORAS
$r = $r / PERIODO_HORAS; // LA DIFERENCIA EN PERIODOS DE 6 HORAS
$r = ceil($r); // LA DIFRENCIA REDONDEADA AL ENTERO MAS ALTO
$r = $r * PERIODO_HORAS * SEGUNDO_POR_HORA * MINUTOS_POR_HORA; // MULTIPLICA LA DIFERENCIA POR EL PERIODO EN SEGUNDOS
return $r + $a; // SE LE AGREGA EL PERIODO INICIAL
}
Ahora podemos realizar algunas pruebas:
Código PHP:
echo date("Y-m-d H:i:s", diferencia_periodo(strtotime("2011-07-22 22:15:00"), strtotime("2011-07-22 22:20:00"))) . "\n"; // DIFERENCIA DE 5 MINUTOS
echo date("Y-m-d H:i:s", diferencia_periodo(strtotime("2011-07-22 22:15:00"), strtotime("2011-07-23 04:15:00"))) . "\n"; // DIFERENCIA DE 6 HORAS
echo date("Y-m-d H:i:s", diferencia_periodo(strtotime("2011-07-22 22:15:00"), strtotime("2011-07-23 04:16:00"))) . "\n"; // DIFERENCIA DE 6 HORAS 1 MINUTO
echo date("Y-m-d H:i:s", diferencia_periodo(strtotime("2011-07-22 22:15:00"), strtotime("2011-07-23 10:15:00"))) . "\n"; // DIFERENCIA DE 12 HORAS
echo date("Y-m-d H:i:s", diferencia_periodo(strtotime("2011-07-22 22:15:00"), strtotime("2011-07-23 10:15:01"))) . "\n"; // DIFERENCIA DE 12 HORAS 1 SEGUNDO
Saludos,