Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: SrTrp en 25 Agosto 2018, 06:12 am



Título: Ver horas de diferencia de una fecha y otra..
Publicado por: SrTrp en 25 Agosto 2018, 06:12 am
Bueno estoy usando para ver la fecha unix para así tener un mejor control ahora lo que quiero es saber cuantas horas le faltan para un dia , lo que hago es crear una variable con la fecha actual y otra con la fecha actual +1 dia y esto lo que intento hacer pero no mas no queda.
Código
  1.            $ahora = new DateTime(strtotime("now"));
  2.            $diamas = new DateTime(strtotime ( '+1 day' , strtotime ( "now" ) ));
  3.            $diferencia = $diamas->diff($ahora);
  4.            echo $diferencia->format('Faltán %h horas..');
  5. //tambien intente así
  6. $ahora = strtotime("now");
  7.            $diamas = strtotime ( '+1 day' , strtotime ( "now" ) );
  8.            $diferencia = $diamas->diff($ahora);
  9.            echo $diferencia->format('Faltán %h horas..');
  10.  
  11.  


Título: Re: Ver horas de diferencia de una fecha y otra..
Publicado por: #!drvy en 25 Agosto 2018, 17:46 pm
Hola,

1. Recuerda que DateTime también permite expresiones.

http://php.net/manual/es/class.datetime.php
http://php.net/manual/es/datetime.formats.relative.php

Es decir, strtotime, realmente no te hace falta.

2. DateTime no admite timestamp en el constructor. Tendrias que usar setTimestamp() si quieres utilizar el Timestamp.
Código
  1. $actual = new DateTime();
  2. $actual->setTimestamp(strtotime('now'));
  3.  
  4. $futuro = new DateTime();
  5. $futuro->setTimestamp(strtotime('+1 day', strtotime('now')));


3. Lo que estás haciendo en la línea 2, es decirle que te de la hora de ahora + un dia (24 horas), por lo tanto, siempre te devolverá 24 horas de diferencia a no ser que ocurra un cambio de horario en medio. Si lo que quieres saber, es cuánto falta para que sea mañana, basta con que uses tomorrow eso te dira cuanto falta para las 00:00 del dia siguiente.

Código
  1. $actual = new DateTime('now');
  2. $futuro = new DateTime('tomorrow');

4. Lo que devuelve el método diff, es una diferencia ya formateada. Es decir, parseada en años, meses, días, horas, minutos y segundos. Por lo tanto, la máxima diferencia de hora que te va a devolver, es 24, la máxima diferencia de días 31 etc.. podrías hacer una función para convertir años a meses, meses a dias y dias a horas, pero seria inexacta cuanto menos pues febrero por ejemplo tiene 28/29 días, y en los demás meses tienes una diferencia de entre 30 y 31 días. La solución, pasa por usar la propiedad 'days' que devuelve el cómputo total de los días que faltan para la fecha indicada en el dif... a eso además, le tendrás sumas las horas que indica que faltan.

Código
  1. $actual = new DateTime('now');
  2. $fecha = new DateTime('tomorrow');
  3.  
  4. $intervalo = $actual->diff($fecha);
  5. $diferenciaHoras = ($intervalo->days * 24) + $intervalo->h;
  6.  
  7.  
  8. if($fecha > $actual){
  9.    echo 'Faltan ', $diferenciaHoras, ' horas para ', $fecha->format('d/M/Y H:i:s');
  10. } else {
  11.    echo 'Han pasado ', $diferenciaHoras, ' desde el ', $fecha->format('d/M/Y H:i:s');
  12. }

Saludos


Título: Re: Ver horas de diferencia de una fecha y otra..
Publicado por: SrTrp en 26 Agosto 2018, 07:25 am
Gracias me ah servido para lo que quería, es almacenar la fecha de 1 día mas en la hora actual cuando se realiza una acción..