Meses/Días/Horas restantes (Diferencia de Fecha/Hora) en PHP

Diciembre 15th, 2009

No Gravatar

He buscado bastante en internet por un script que me permita determinar la diferencia entre dos fechas en PHP. Obtuve resultados que me decian “250 dias, 14 horas, 12 minutos” u otros que requerian la clase de “DateTime” usando la funcion estatica diff.

Sin embargo, en mi caso yo requeria una solución implementable en cualquier version de PHP del 5 para arriba. Y no encontré un solo script que me diera lo que requería: Faltan 5 meses, 2 días, 4 horas.

Por lo tanto desarrollé el siguiente script, tomando como ejemplo uno que encontré en la web, y modificandolo para proveer lo que requería que me devolviera. Si te gusta, o si consideras que pudieras mejorarlo aún mas, se aceptan comentarios.

= $uts['start'] )
        {
            //This extracts the total amount of Days, Hours, Minutes
            $diff = $uts['end'] - $uts['start'];
            if ($days=intval((floor($diff/86400))))
                $diff = $diff % 86400;
            if ($hours=intval((floor($diff/3600))))
                $diff = $diff % 3600;
            if ($minutes=intval((floor($diff/60))))
                $diff = $diff % 60;
            $diff = intval( $diff );    
 
            //Gather separate variables
            $start_year = intval(date("Y", $uts['start']));
            $start_month = intval(date("n", $uts['start']));
            $start_day = intval(date("j", $uts['start']));
            $start_hour = intval(date("H", $uts['start']));
            $end_year = intval(date("Y", $uts['end']));
            $end_month = intval(date("n", $uts['end']));
            $end_day = intval(date("j", $uts['end']));
            $end_hour = intval(date("H", $uts['end']));
            $end_daysinmonth = intval(date("t", $uts['end']));
 
            //Get the Difference in Years and Months
            $diff_years = $end_year - $start_year;
            $diff_months = ($diff_years > 0) ? (($diff_years * 12) - abs($end_month - $start_month)) : abs($end_month - $start_month);
 
            //Calculate Difference in Days
            $curr_month = $start_month;
            $curr_year = $start_year;
            $diff_days = $days;
            for ($y = 0; $y < $diff_months; $y++)
            {
                $days_this_month = intval(date("t", mktime(0,0,0,$curr_month,1,$curr_year)));
                $diff_days -= $days_this_month;
 
                $curr_month++;
                if ($curr_month == 13)
                {
                    $curr_month = 1;
                    $curr_year++;
                }
            }
 
            //Pass on the Difference in Hours
            $diff_hours = $hours;
 
            //Format the Data
            if ($digits == true)
            {
                $diff_months = sprintf('%02d', $diff_months);
                $diff_days = sprintf('%02d', $diff_days);
                $diff_hours = sprintf('%02d', $diff_hours);
                $days = sprintf('%02d', $days);
                $minutes = sprintf('%02d', $minutes);
                $diff =sprintf('%02d', $diff);
            }
 
            //Return the Data
            $returnarray = array('months'=>$diff_months, 'daysmonth'=>$diff_days, 'days'=>$days, 'hours'=>$diff_hours, 'minutes'=>$minutes, 'seconds'=>$diff);
            return( $returnarray );
        }
        else
        {
            //Error: Start Date is Greater than End Date
            $returnarray = array('months'=>0, 'daysmonth'=>0, 'days'=>0, 'hours'=>0, 'minutes'=>0, 'seconds'=>0);
            return($returnarray);
        }
    }
    else
    {
        trigger_error("Invalid date/time data detected", E_USER_WARNING);
    }
    return(false);
}
?>
<div id="countdown">
<h2>Ya llegamos? No, pero en:</h2>
<ul id="countdown_tiempo">
	<li> Meses</li>
	<li> Dias</li>
	<li> Horas</li>
</ul>
</div>

Categorías: PHP, Programación, Tutorials

Etiquetas: , , , , , , , , , , Dejar un comentario

Feed de comentarios2 comentarios

  1. marcosberblesNo Gravatar

    Hola buscando encontré esto, ojalá que a alguien le sirva, si usa MySQL

    http://www.forosdelweb.com/f86/datediff-parecido-sacar-minutos-segundos-760689/

    Saludos!!!

  2. lemiffeNo Gravatar

    Que tal Marcos!

    Muchas gracias por habernos dejado el comentario.

    De hecho cuando hice este script de arriba me encontré con el que has mencionado, sin embargo, en algunos casos sería mejor evitar hacer una base de datos cuando todo se debería poder hacer desde PHP.

    De hecho debería haber un DATEDIFF de forma nativa en PHP… Esperemos que para PHP 6 lo haya.

Dejar un comentario

Feed

http://mtycoders.com / Meses/Días/Horas restantes (Diferencia de Fecha/Hora) en PHP