Hola,
1. Recuerda que
DateTime también permite expresiones.
http://php.net/manual/es/class.datetime.phphttp://php.net/manual/es/datetime.formats.relative.phpEs decir,
strtotime, realmente no te hace falta.
2. DateTime no admite timestamp en el constructor. Tendrias que usar
setTimestamp() si quieres utilizar el Timestamp.
$actual = new DateTime();
$futuro = new DateTime();
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.
$actual = new DateTime('now');
$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.
$actual = new DateTime('now');
$fecha = new DateTime('tomorrow');
$intervalo = $actual->diff($fecha);
$diferenciaHoras = ($intervalo->days * 24) + $intervalo->h;
if($fecha > $actual){
echo 'Faltan ', $diferenciaHoras, ' horas para ', $fecha->format('d/M/Y H:i:s');
} else {
echo 'Han pasado ', $diferenciaHoras, ' desde el ', $fecha->format('d/M/Y H:i:s');
}
Saludos