php - una - ¿Cuántos días faltan para la fecha XYZ?
cuantos dias faltan para que termine el año (6)
Dada una fecha determinada, ¿cuál es la forma más fácil de determinar cuántos días hasta esa fecha (en PHP)? Estoy tratando de construir un widget de cuenta atrás, ¡Gracias!
Acabo de encontrar esto en mi código para una aplicación en vivo donde el sistema se considera incorrectamente hoy y mañana como hoy. Acabamos de entrar en el horario de verano británico y esto ha causado un problema con nuestra aplicación.
Ahora estoy usando lo siguiente, que me está dando el resultado correcto:
function days_away_to($dt) {
$mkt_diff = strtotime($dt) - time();
return floor( $mkt_diff/60/60/24 ) + 1; # 0 = today, -1 = yesterday, 1 = tomorrow
}
Por supuesto, usar la clase DateTime es la mejor solución en el futuro ...
Ampliando la respuesta de Schnaader, aquí hay una función de una sola línea que toma una cadena de fecha como parámetro, pero solo devuelve el número de días:
<?php
function days_until($date){
return (isset($date)) ? floor((strtotime($date) - time())/60/60/24) : FALSE;
}
?>
Días en formato de minutos y segundos:
// current time
$today = new DateTime(format_date(time(), ''custom'', ''d M Y H:i:s''));
// date to which we want to compare (A Drupal field in my case).
$appt = new DateTime(format_date($yourdate_is_timestamp, ''custom'', ''d M Y H:i:s'' ));
// Months
$months_until_appt = $appt->diff($today)-> m;
// days
$days_until_appt = $appt->diff($today)-> days;
// hours
$hours_until_appt = $appt->diff($today)-> h;
// minutes
$minutes_until_appt = $appt->diff($today)-> i;
// seconds
$seconds_until_appt = $appt->diff($today)-> s;
echo ''days until: '' . $days_until_appt;
echo ''hours until: '' . $hours_until_appt;
echo ''minutes until: '' . $minutes_until_appt;
echo ''seconds until: '' . $seconds_until_appt;
No trate las fechas como números enteros. Use su base de datos, que tiene un buen soporte para tratar con calendarios / tiempo.
select datediff("2009-11-12", now())
PHP 5.3 ha introducido la clase DateTime que implementa una función ''diff''. Ver http://www.php.net/manual/en/datetime.diff.php
<?php
$cdate = mktime(0, 0, 0, 12, 31, 2009, 0);
$today = time();
$difference = $cdate - $today;
if ($difference < 0) { $difference = 0; }
echo "There are ". floor($difference/60/60/24)." days remaining";
?>