transcurrido transcurridas tiempo sacar horas fechas entre días diferencia comparar como calcular años php datetime date-math

transcurridas - PHP encuentra diferencia entre dos fechas



horas transcurridas entre dos fechas php (5)

Estoy tratando de obtener la diferencia entre dos fechas y devolverlas como fecha y hora. He encontrado ejemplos usando diff pero parece que no puedo hacerlo bien.

$timein = date("Y-m-d H:i:s"); $timeout = date("Y-m-d 20:00:00"); $totaltime = $timein->diff($timeout);

Sin embargo, $ totaltime registra "0000-00-00 00:00:00" en mi base de datos. ¿Esto es porque no estoy formateando mi variable de tiempo total?


<?php $val1 = ''2014-04-10 11:34:09''; $val2 = ''2015-04-10 10:56:15''; $result1 = (explode('' '', $val1)) ; $result2 = (explode('' '', $val2)) ; $date1= new DateTime($result1[0]); $date2=new DateTime($result2[0]); $diffdate=date_diff($date1,$date2); $difftime = strtotime($result1[1]) - strtotime($result2[1]); $dates=$diffdate->format("%R%a days"); echo $dates; echo $difftime; ?>


<?php $value=''20140203113405''; $val=''20150203113410''; $val1=str_split($val,2); $dateval1=$val1[0].$val1[1]."-".$val1[2]."-".$val1[3]; $timeval1=$val1[4].":".$val1[5].":".$val1[6]; $val2=str_split($value,2); $dateval2=$val2[0].$val2[1]."-".$val2[2]."-".$val2[3]; $timeval2=$val2[4].":".$val2[5].":".$val2[6]; $date1=new DateTime($dateval1); $date2=new DateTime($dateval2); $diffdate=date_diff($date1,$date2); $dates=$diffdate->format("%a days"); $difftime = strtotime($timeval1) - strtotime($timeval2); echo $dates; echo $difftime."seconds"; ?>


Simplemente puede usar el formato y diferencia de fecha y hora para calcular la diferencia.

<?php $datetime1 = new DateTime(''2009-10-11 12:12:00''); $datetime2 = new DateTime(''2009-10-13 10:12:00''); $interval = $datetime1->diff($datetime2); echo $interval->format(''%Y-%m-%d %H:%i:%s''); ?>

Para obtener más información sobre el formato DATETIME, consulte: aquí
Puede cambiar el formato de intervalo en la forma que desee.

Aquí está el ejemplo de trabajo

PD Estas funciones ( diff () y format () ) funcionan solo con> = PHP 5.3.0


No estoy seguro de qué formato está buscando en su diferencia, pero he aquí cómo hacerlo usando DateTime

$datetime1 = new DateTime(); $datetime2 = new DateTime(''2011-01-03 17:13:00''); $interval = $datetime1->diff($datetime2); $elapsed = $interval->format(''%y years %m months %a days %h hours %i minutes %s seconds''); echo $elapsed;


John Conde hace todos los procedimientos correctos en su método, pero no satisface el último paso en su pregunta, que es formatear el resultado según sus especificaciones.

Este código ( Demo ) mostrará la diferencia bruta, expondrá el problema al tratar de formatear inmediatamente la diferencia en bruto, mostrará mis pasos de preparación y finalmente presentará el resultado con el formato correcto:

$datetime1 = new DateTime(''2017-04-26 18:13:06''); $datetime2 = new DateTime(''2011-01-17 17:13:00''); // change the millenium to see output difference $diff = $datetime1->diff($datetime2); // this will get you very close, but it will not pad the digits to conform with your expected format echo "Raw Difference: ",$diff->format(''%y years %m months %d days %h hours %i minutes %s seconds''),"/n"; // Notice the impact when you change $datetime2''s millenium from ''1'' to ''2'' echo "Invalid format: ",$diff->format(''%Y-%m-%d %H:%i:%s''),"/n"; // only H does it right $details=array_intersect_key((array)$diff,array_flip([''y'',''m'',''d'',''h'',''i'',''s''])); echo ''$detail array: ''; var_export($details); echo "/n"; array_map(function($v,$k) use(&$r) { $r.=($k==''y''?str_pad($v,4,"0",STR_PAD_LEFT):str_pad($v,2,"0",STR_PAD_LEFT)); if($k==''y'' || $k==''m''){$r.="-";} elseif($k==''d''){$r.=" ";} elseif($k==''h'' || $k==''i''){$r.=":";} },$details,array_keys($details) ); echo "Valid format: ",$r; // now all components of datetime are properly padded

Salida:

Raw Difference: 6 years 3 months 9 days 1 hours 0 minutes 6 seconds Invalid format: 06-3-9 01:0:6 $detail array: array ( ''y'' => 6, ''m'' => 3, ''d'' => 9, ''h'' => 1, ''i'' => 0, ''s'' => 6, ) Valid format: 0006-03-09 01:00:06

Ahora, para explicar mi preparación de valores de fecha y hora:

$details toma el objeto diff y lo lanza como una matriz. array_flip ([''y'', ''m'', ''d'', ''h'', ''i'', ''s'']) crea una matriz de claves que se utilizará para eliminar todas las claves irrelevantes de (array)$diff usando matriz_intersección_clave () .

Luego usando array_map () mi método itera cada valor y clave en $details , rellena su lado izquierdo con la longitud apropiada con 0 , y concatena la cadena $r (resultado) con los separadores necesarios para cumplir con el formato de fecha y hora solicitado.