2009-03-17 19 views

risposta

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

ringraziarvi per Questo! Risolto il mio problema :) – yanike

+1

Questo dipende molto dalla definizione "giorni fino a". Ad esempio questo frammento mi dice che la vigilia di Capodanno è di 34 giorni di distanza, e wolfram alfa, google, siri e praticamente ogni altro sito che cerco mi dice 35 giorni. FWIW – AlBeebe

+0

@AlBeebe quindi aggiungi solo +1. Cosa c'è di così difficile? – Devfly

8

Non trattare le date come numeri interi. Usa il tuo database, che ha un buon supporto per gestire i calendari/ora.

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

unix timestamp FTW – andufo

22

Ampliando la risposta di schnaader, qui è una funzione one-liner che prende una stringa di data come parametro, ma restituisce solo il numero di giorni:

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

Grazie! Questo mi ha aiutato molto e funziona a meraviglia per ottenere il numero di giorni da una data. –

+0

Grazie! Ne stavo cercando uno negativo, questo ha aiutato molto! – pattyd

+1

Per qualche motivo ieri è -2 ..... cosa è successo? – pattyd

7

Giorni minuti e secondi 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' classe FTW –

+0

Secondo http://php.net/manual/en/ref.datetime.php' -> days' (ad esempio) non è una classe valida metodo. Puoi modificare il tuo codice per usare '-> format ('d')', '-> format ('m')', ecc. Quindi è più chiaro per chi visita? – Wes

+0

Per il record - I aggiornato per l'uso di 'DateTime' - non posso credere alla risposta accettata usando' DateTime' nella soluzione. – Wes

-1

Ho appena trovato questo nel mio codice per un'app live in cui il sistema ha erroneamente considerato oggi e domani come oggi. Siamo appena entrati nel British Summer Time e questo ha causato un problema con la nostra app.

ora sto usando il seguente, che mi sta dando il risultato corretto:

function days_away_to($dt) { 
    $mkt_diff = strtotime($dt) - time(); 
    return floor($mkt_diff/60/60/24) + 1; # 0 = today, -1 = yesterday, 1 = tomorrow 
} 

Naturalmente, utilizzando la classe DateTime è la soluzione migliore andando avanti ...

+1

Questo è esattamente lo stesso codice che [è stato già pubblicato qui] (http://stackoverflow.com/a/8807610/447356) e hai appena cambiato i nomi delle variabili. -1 per aver cercato di ottenere un rappresentante per il lavoro di altre persone e sprecare il nostro tempo. –

+0

Grazie SW ma sfortunatamente quella soluzione non ha funzionato per me: mi sta dando 0 per il 2014-03-31 dicendomi che quella è la data di oggi (è il 30 marzo ora nel Regno Unito).Ho aggiunto +1, che lo corregge per me. –

+0

Quindi dovresti evidenziarlo nel tuo post collegandoti a quell'altra risposta e spiegando che hai appena aggiunto 1 per farlo funzionare. Si prega di fare la modifica e fammi sapere. –

Problemi correlati