22/07/2011, 22:47
|
| Colaborador | | Fecha de Ingreso: julio-2011 Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 5 meses Puntos: 793 | |
Respuesta: Consulta PHP funcion date() Cita:
Iniciado por HackmanC 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, Según el que hizo el post necesita sumar 6 horas a la fecha, si sigue siendo menor necesita sumarle 12 y asi sucesivamente. Muy interesante lo que propones. |