2009-12-21 23 views
77

¿Existe alguna forma rápida de calcular la diferencia de fecha en php? Por ejemplo:Diferencia de fecha en php en días?

$date1 = '2009-11-12 12:09:08'; 
$date2 = '2009-12-01 08:20:11'; 

y luego hacer un cálculo, la fecha 2 $ menos $ fecha1

leí documentación de php.net, pero no hubo suerte. ¿Hay una forma rápida de hacerlo?

+0

@kiamlaluno - eso no es un * exacto * duplicado, ya que es mucho más complicado (el OP en esa pregunta quiere una fecha formateada como "x años, meses, z días", etc.). –

+0

Quiero en "días" :) – mysqllearner

Respuesta

43

strtotime convertirá su cadena de fecha en una marca de tiempo Unix. . (segundos desde la época UNIX

$ts1 = strtotime($date1); 
$ts2 = strtotime($date2); 

$seconds_diff = $ts2 - $ts1; 
+11

tenga en cuenta que esto podría darle diferentes resultados si entre las 2 fechas hay un cambio de hora (como en primavera u otoño). intente esto: echo strtotime ('2013-03-30 21:00') - strtotime ('2013-03-29 21:00'); echo strtotime ('2013-03-31 21:00') - strtotime ('2013-03-30 21:00'); obtienes 86400 y 82800. los resultados son realmente correctos. pero si divide por 86400 para obtener la cantidad de días que necesita tener en cuenta (así que mejor use la función de diferencia de fecha). – memical

+2

Si tiene una versión moderna de php, use la solución de Adam. PHP tiene un montón de código para tener en cuenta las anomalías relacionadas con el tiempo. – txyoji

161

recomendaría utilizar fecha-> diff función, como en el siguiente ejemplo:

$dStart = new DateTime('2012-07-26'); 
    $dEnd = new DateTime('2012-08-26'); 
    $dDiff = $dStart->diff($dEnd); 
    echo $dDiff->format('%R'); // use for point out relation: smaller/greater 
    echo $dDiff->days; 

ver http://www.php.net/manual/en/datetime.diff.php

+2

Esta función requiere php 5.3 o superior como se indica en @txyoji – levhita

+13

use '$ diffInDays = (int) $ dDiff-> format ("% r% a ");' para obtener valores que puede usar directamente como "-2" o "2" (vea http://www.php.net/manual/en/dateinterval.format.php para descripciones de parámetros de formato) – flu

+0

Y cambie "-" a ":" si accidentalmente o no intenta poner la fecha con time ... –

13

A continuación código dará la salida por número de días, eliminando la diferencia entre dos fechas ...

$str = "Jul 02 2013"; 
$str = strtotime(date("M d Y ")) - (strtotime($str)); 
echo floor($str/3600/24); 
+0

Al tratar de calcular la diferencia de fecha para mi 'JQuery datepicker',' floor' me estaba dando un resultado extraño. Por ejemplo, 'floor ((strtotime (((isset ($ _ POST ['date']) y strtotime ($ _ POST ['date']))) $ _POST ['date']: date (" Ymd "))) - strtotime (date ("Ymd")))/3600/24)) 'dame una diferencia de 9.9583333333333 entre el 31 de marzo y el 21 de marzo (entonces 9 con redondeo cuando estoy esperando 10). Usé la función 'round' para resolver el problema. –

+0

Sí Jonathan, Tienes razón. –

Cuestiones relacionadas