Calcular la diferencia entre dos fechas con PHP

Una de las prácticas más comunes con las que me encuentro en mi trabajo como desarrollador PHP es calcular la diferencia entre dos fechas. Te lo digo de verdad, he trabajado en muchísimos proyectos y me he encontrado con esta situación muchas veces. Así que pensé, ¿por qué no compartir esta importante pieza de código con todos vosotros? En este tutorial os explicaré la técnica para calcular la diferencia entre dos fechas en php. Puedes utilizar esta técnica para obtener el total en días, minutos, segundos, meses y años.

Utilizando la clase DateTime de PHP

Para ello utilizaré la clase DateTime de PHP para asignar fechas. Funciona en PHP 5.2 y versiones superiores. Para calcular la diferencia entre dos fechas utilizo DateTime::diff que funciona en PHP 5.3 y superior. Si estás utilizando una versión más antigua, creo que es hora de ir actualizando.

No olvides configurar tu zona horaria antes de empezar a trabajar con fechas y horas. Para establecer una zona horaria utiliza el código de abajo. Puedes ver la lista entera de timezones aquí.

date_default_timezone_set('Asia/Kolkata');

Días de diferencia entre dos fechas

Digamos que tienes que encontrar la diferencia en días de un evento que se celebrará el 27-08-2016 desde el día actual, que es el 25-08-2016. Echa un vistazo al código de abajo para saber calcular los días en PHP.

$date1 = new DateTime("2015-02-14");
$date2 = new DateTime("2015-02-16");
$diff = $date1->diff($date2);
// will output 2 days
echo $diff->days . ' days ';

Si imprimes el objeto $diff verás lo siguiente.

DateInterval Object
(
    [y] => 0 // year
    [m] => 0 // month
    [d] => 2 // days
    [h] => 0 // hours
    [i] => 0 // minutes
    [s] => 0 // seconds
    [invert] => 0 // positive or negative 
    [days] => 2 // total no of days

)

Vamos a ver otro ejemplo. Pongamos que tienes que saber el número de días desde que un cliente pidió un pedido. La fecha de hoy es 25-08-2016 y el cliente reservó el libro el 21-08-2016, por lo tanto la diferencia es de 4 días. Echa un vistazo al código de abajo para saber calcular los días en PHP.

$date1 = new DateTime("2015-02-14");
$date2 = new DateTime("2015-02-10");
$diff = $date1->diff($date2);
// this will output 4 days                           
echo $diff->days .' days ';

// if you want to check for minus
echo ($diff->invert == 1) ? ' - ' . $diff->days .' days '  : $diff->days .' days ';

Diferencia en un formato personalizado

Otro caso común es cuando quieres mostrar el tiempo que ha pasado desde que naciste. El formato debería ser algo así como 29 años, 10 meses, 16 días, 10 horas, 15 minutos y 10 segundos. Si quieres lograr esto, échale un vistazo al código de más abajo. He creado una función llamada get_format() para devolver el resultado formateado.

 function get_format($df) {

    $str = '';
    $str .= ($df->invert == 1) ? ' - ' : '';
    if ($df->y > 0) {
        // years
        $str .= ($df->y > 1) ? $df->y . ' Years ' : $df->y . ' Year ';
    } if ($df->m > 0) {
        // month
        $str .= ($df->m > 1) ? $df->m . ' Months ' : $df->m . ' Month ';
    } if ($df->d > 0) {
        // days
        $str .= ($df->d > 1) ? $df->d . ' Days ' : $df->d . ' Day ';
    } if ($df->h > 0) {
        // hours
        $str .= ($df->h > 1) ? $df->h . ' Hours ' : $df->h . ' Hour ';
    } if ($df->i > 0) {
        // minutes
        $str .= ($df->i > 1) ? $df->i . ' Minutes ' : $df->i . ' Minute ';
    } if ($df->s > 0) {
        // seconds
        $str .= ($df->s > 1) ? $df->s . ' Seconds ' : $df->s . ' Second ';
    }

    echo $str;
}

Como utilizar la función: Calcula los días de diferencia desde tu nacimiento y pásale el objeto diff a la función que acabamos de crear, get_format()

$date1 = new DateTime("1990-04-02");
$date2 = new DateTime("now");
$diff = $date1->diff($date2);
echo get_format($diff);

/*
I will get something like this below ( the time section will be variable )
24 Years 10 Months 12 Days 18 Hours 6 Minutes 26 Seconds 

*/

Minutos de diferencia entre dos fechas

Si necesitas calcular el sumatorio total de minutos entre dos fechas, utiliza el código de más abajo.

$date1 = new DateTime("2015-02-14 15:29:00");
$date2 = new DateTime("now");
$diff = $date1->diff($date2);
// 38 minutes to go [number is variable]
echo ( ($diff->days * 24 ) * 60 ) + ( $diff->i ) . ' minutes';
// passed means if its negative and to go means if its positive
echo ($diff->invert == 1 ) ? ' passed ' : ' to go ';

Segundos de diferencia entre dos fechas

Si necesitas calcular el sumatorio total de minutos entre dos fechas, utiliza el código de más abajo.

$date1 = new DateTime("2015-02-14 15:29:00");
$date2 = new DateTime("now");
$diff = $date1->diff($date2);
// 3036 seconds to go [number is variable]
 echo ( ($diff->days * 24 ) * 60 ) + ( $diff->i * 60 ) + $diff->s . ' seconds';
// passed means if its negative and to go means if its positive
echo ($diff->invert == 1 ) ? ' passed ' : ' to go ';

Fuente: thesoftwareguy.in

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP