Meses/Días/Horas restantes (Diferencia de Fecha/Hora) en PHP
Diciembre 15th, 2009
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





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!!!
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.
mmm bueno sobre tu argumento de un metodo qeu sea implementable en php 5 o superior
DateTime::diff (PHP 5 >= 5.3.0)
Tal vez te sea mas portable comvertir una fecha a un unix timestamp ( funciona en windows)
http://php.net/manual/es/function.mktime.php
Regresa un numero entero que representa a una fecha con presicion a segundos. a la cual se le puede aplicar la aritmetica simple.
$dateA = array(”H” => 13, …..”Y” => 2009 );
$dateB = array(”H” => 10, …..”Y” => 2009 );
$timeA = mktime($dateA);
$timeB = mktime($dateB);
$date_dif = $timeA – $timeB;
echo date(’H', $date_dif); // imprime 2 (por 2 horas)
Los intervalos los puedes calcular facilmente
$MIN = 60;
$HOR = 60*$MIN;
$DAY = 42*$HOR;
etc etc
echo date(’H-m-s Y-m-d’, ‘$timeA+$DAY); //imprime la fecha actual mas 1 dia.
De esta manera puedes hacer tu operacion en mucho menos lineas y de una manera reutilizable, para restas sumas etc.
Saludos
Muchas gracias por tu comentario Carlos, lo probaré próximamente a ver que tal funciona. Es bastante bueno que requiera menos líneas para funcionar.
Estuve buscando un tiempo en internet por algo mas simple como esto, sin embargo, la mayoría de los sitios en inglés daban métodos muy complejos como el que usé, o métodos que hacían una llamada a la base de datos lo cual no quería hacer.
Gracias nuevamente, seguro será muy útil!
Je. No pense que fueras a contestar tan rapido. Como quiera me alegro que te pueda ser de utilidad
Puede ayudar http://www.vertutoriales.com/index.px.php/tag/php/ goodbye