2012-05-06 15 views
16

Tengo dos fechas en phpla sustracción de dos fechas en php

$date1 = 'May 3, 2012 10:38:22 GMT' 

$date2 = '06 Apr 2012 07:22:21 GMT' 

Entonces me restan dos de ellos

$date2 - $date1 

, y obtener

Result:6 

¿Por qué es el número 6 y no 27? ...? ¿Cómo puedo restar las dos fechas y hacer que me devuelva un resultado en función de las diferencias del mes al restar los años & días & vez?

Respuesta

43

Parte 1: ¿Por qué es el resultado 6?

Las fechas son simplemente cadenas cuando las sustrae por primera vez. PHP intenta convertirlos a enteros. Hace esto convirtiendo hasta el primer no número. Entonces, la fecha2 se convierte en 6 y la fecha1 se convierte en 0.

Parte 2: ¿Cómo se hace para que funcione?

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT'); 
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT'); 

$secs = $datetime2 - $datetime1;// == <seconds between the two times> 
$days = $secs/86400; 

Convertir según corresponda.

+0

Qué necesito para convertir los segundos entre dos días times..to .. ¿No hay una manera más rápida –

+0

segundos en un día = 60 * 60 * 24 = 86,400 así que divida por eso. – evan

+0

Gran solución @evan. Pulgares arriba (y) – NullPointer

9

Usando DateTime y DateInterval,

$date1 = new DateTime("May 3, 2012 10:38:22 GMT"); 
$date2 = new DateTime("06 Apr 2012 07:22:21 GMT"); 
echo $date1->diff($date2)->format("%d"); 
+0

Esto me devolverá la diferencia en días ... porque eso es lo que quiero ... para encontrar la diferencia de fecha –

+0

¿No es eso lo que quieres? –

+0

sí, es ... gracias –

12

Hay una manera de utilizar mktime n hacen que la fecha en la marca de tiempo y luego restar y luego utilizar la función para mostrar la fecha en la forma u quieren ....

Otra forma es que tanto el formato de fechas en el mismo formato luego restar ....

Tercera forma

$date1= new DateTime("May 3, 2012 10:38:22 GMT"); 
$date2= new DateTime("06 Apr 2012 07:22:21 GMT"); 
echo $date1->diff($date2)->("%d"); 

sucesivamente manera

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT'); 
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT'); 
$secs = $datetime2 - $datetime1;// == return sec in difference 
$days = $secs/86400; 
5
$todate= strtotime('May 3, 2012 10:38:22 GMT'); 
$fromdate= strtotime('06 Apr 2012 07:22:21 GMT'); 
$calculate_seconds = $todate- $fromdate; // Number of seconds between the two dates 
$days = floor($calculate_seconds/(24 * 60 * 60)); // convert to days 
echo($days); 

Este código se encuentra la diferencia de fechas entre dos fechas ..

Aquí salida es 27

5

La mayoría de las soluciones presentadas parece estar funcionando, pero todo el mundo se olvida de una cosa: el tiempo.

Tomando Evan ejemplo:

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT'); 
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT'); 

$secs = $datetime2 - $datetime1;// == <seconds between the two times> 
$days = $secs/86400; 

Cuando no recortar parte del tiempo, lo que podría conducir a milscalculations. Por ejemplo: el intervalo entre 2014-05-01 14:00:00 (Y-m-d) y 2014-05-02 07:00:00 será 0, xxx, no 1. Usted debe recortar el tiempo de cada fecha.

lo que debe ser:

$datetime1 = strtotime(date('Y-m-d', strtotime('May 3, 2012 10:38:22 GMT'))); 
$datetime2 = strtotime(date('Y-m-d', strtotime('06 Apr 2012 07:22:21 GMT'))); 

$secs = $datetime2 - $datetime1;// == <seconds between the two times> 
$days = $secs/86400; 
0
echo 'time'.$notification_time= "2008-12-13 10:42:00"; 
date_default_timezone_set('Asia/Kolkata'); 
echo 'cureen'.$currenttime=date('Y-m-d H:i:s'); 
$now = new DateTime("$notification_time"); 
$ref = new DateTime("$currenttime"); 
$diff = $now->diff($ref); 
printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i); 
0

Si desea utilizar diff (devuelve un objeto DateInterval) método, la forma correcta es formatear con un%.Es decir:

Si marca http://php.net/manual/en/dateinterval.format.php

La forma correcta es:

echo $date1->diff($date2)->format("%a"); 

Para conseguir todos los días

+0

se omitió el nombre de un método, es correcto: echo $ date1-> diff ($ date2) -> format ("% a"); –

+0

eres cierto, editaré mi respuesta. Gracias –