Cómo obtener el número de horas hasta la medianoche con PHP

Escenario: se ingresó un registro en la base de datos.

Estoy tratando de descubrir las siguientes ecuaciones:

  1. Cómo obtener el número de horas desde que se agregó el registro.
  2. Cómo obtener la cantidad de horas que quedan hasta la medianoche desde que se agregó el registro.

Dado estos tiempos:

  • Fecha / Hora: 2012-08-22 20:11:20
  • Marca de tiempo: 1345684280
  • Medianoche esta noche: 2012-08-23 00:00:00
  • Sello de medianoche: 1345698000

Siento que estoy en el camino correcto. Solo necesito algunas matemáticas adecuadas para hacer los cálculos? Soy horrible en matemáticas. Cualquier ayuda o guía sería apreciada. No estoy buscando a alguien que COMPLETE ESTO PARA MÍ. Solo estoy buscando consejos sobre lo que estoy haciendo mal, o cómo podría hacerlo mejor. Quizás explique las fórmulas matemáticas necesarias para lograr mi objective.

Esto es lo que tengo hasta ahora:

class tools{ public function __construct(){ } public function check_time($time, $request){ $time = strtotime($time); if($request == 'since'){ $theTime = time() - $time; $prefix = 'Since:'; } elseif($request == 'until'){ $midnight = mktime(0, 0, 0, date('n'), date('j'), date('Y')); $theTime = $midnight - $time; $prefix = 'Until:'; } $tokens = array ( 31536000 => 'year', 2592000 => 'month', 604800 => 'week', 86400 => 'day', 3600 => 'hour', 60 => 'minute', 1 => 'second' ); foreach($tokens as $unit => $text){ if($theTime 1)?'s':''); } } }// EoF tools class $tools = new tools(); print_r($tools->check_time('2012-08-22 20:11:20', 'since')); print_r($tools->check_time('2012-08-22 20:11:20', 'until')); 

La solución aquí es muy simple. Hay un pequeño error que está causando todos sus problemas.

En tu código tienes esto para calcular la medianoche.

 $midnight = mktime(0, 0, 0, date('n'), date('j'), date('Y')); 

Esto es incorrecto por el simple hecho de que está usando la medianoche de TODAY (que habría sido las 00:00 de hoy, sin importar cuántas horas atrás a partir de ahora. Quieres la MAÑANA de medianoche, ya que se considera 00:00 en 24 horas y es mañana. la manera de hacerlo es así:

 $midnight = strtotime("tomorrow 00:00:00"); 

Solo tenga en cuenta que strtotime () basa todo fuera de GMT, así que asegúrese de establecer una zona horaria predeterminada en el archivo / aplicación.

Espero que mi respuesta sea clara y explique por qué el código que publicó es incorrecto y cómo solucionarlo.

Tal vez algo como esto? Tengo que admitir que no entiendo completamente cuál es tu resultado deseado:

 $d1 = new DateTime('2012-08-22 20:11:20'); $d2 = new DateTime('2012-08-23 00:00:00'); $interval = $d1->diff($d2); echo $interval->format('%h hours %i minutes and %s seconds'); 

La medianoche no es más que el día siguiente sin especificar el momento en que la mejor manera de hacerlo debe ser:

 < ?php $datetime1 = new DateTime(date('Ymd H:i:s'));//current datetime object $datetime2 = new DateTime(date('Ym-').date(d));//next day at midnight $interval = $datetime1->diff($datetime2);//diference echo $interval->format('H');printing only hours (same as date format) ?> 

si quieres saber más: php date_diff

Puedes intentar esto:

 $now = strtotime('2012-08-22 20:11:20'); $midnight = strtotime('2012-08-23 00:00:00'); $difference = $midnight - $now; echo date("H:i:s", $difference);