2009-03-17 9 views

Respuesta

45
<?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"; 
?> 
+1

gracias por ¡esta! Resolvió mi problema :) – yanike

+1

Esto realmente depende de su definición "días hasta". Por ejemplo, este fragmento me dice que la víspera de Año Nuevo está a 34 días, y wolfram alpha, google, siri y casi todos los demás sitios que busco me dicen 35 días. FWIW – AlBeebe

+0

@AlBeebe luego solo agregue +1. ¿Qué hay de difícil en eso? – Devfly

8

No trate las fechas como números enteros. Use su base de datos, que tiene un buen soporte para lidiar con calendarios/tiempo.

select datediff("2009-11-12", now()) 
+2

marca de tiempo unix FTW – andufo

22

Ampliando la respuesta de schnaader, aquí es una función de una sola línea que lleva una cadena de fecha como parámetro, pero sólo devuelve el número de días:

<?php 
function days_until($date){ 
    return (isset($date)) ? floor((strtotime($date) - time())/60/60/24) : FALSE; 
} 
?> 
+0

Gracias! Esto me ayudó mucho y funciona de maravilla para obtener el número de días de una fecha. –

+0

Gracias! Estaba buscando uno que dé negativo, ¡esto ayudó mucho! – pattyd

+1

Por alguna razón, ayer es -2 ... ¿qué pasó? – pattyd

7

Días minutos y segundos formato:

// 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; 
+0

'DateTime' clase FTW –

+0

Según http://php.net/manual/en/ref.datetime.php' -> days' (por ejemplo) no es una clase válida método. ¿Puedes modificar tu código para usar '-> formato ('d')', '-> formato ('m')', etc. por lo que es más claro para quienes lo visitan? – Wes

+0

Para el registro - Actualicé para el uso de 'DateTime' - no puedo creer la respuesta aceptada utilizando' DateTime' utilizado en la solución. – Wes

-1

Acabo de encontrar esto en mi código para una aplicación en vivo donde el sistema 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 utilizando 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, el uso de la clase DateTime es la mejor solución va hacia adelante ...

+1

Este es exactamente el mismo código que [ya se publicó aquí] (http://stackoverflow.com/a/8807610/447356) y acaba de cambiar los nombres de las variables. -1 por intentar obtener un representante para el trabajo de otras personas y perder el tiempo. –

+0

Gracias SW pero desafortunadamente esa solución no funcionó para mí: me está dando 0 para 2014-03-31 diciéndome que esa es la fecha de hoy (es 30 de marzo ahora en el Reino Unido).He agregado +1, que me lo corrige. –

+0

Por lo tanto, debe resaltar esto en su publicación al vincular a esa otra respuesta y explicar que acaba de agregar 1 para que funcione. Por favor haz la edición y házmelo saber. –

Cuestiones relacionadas