2009-03-17 9 views

Répondre

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

Nous vous remercions de ce! Résolu mon problème :) – yanike

+1

Cela dépend vraiment de votre définition "jours avant". Par exemple, cet extrait me dit que la nouvelle année est à 34 jours, et wolfram alpha, google, siri, et à peu près tous les autres sites que je recherche me dit 35 jours. FWIW – AlBeebe

+0

@AlBeebe alors juste ajouter +1. Qu'est-ce qui est si difficile à ce sujet? – Devfly

8

Ne pas traiter les dates comme des nombres entiers. Utilisez votre base de données, qui a un bon support pour traiter les calendriers/temps.

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

horodatage unix FTW – andufo

22

L'expansion sur la réponse de schnaader, voici une fonction d'une doublure qui prend une chaîne de date comme paramètre mais renvoie le nombre de jours:

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

Merci! Cela m'a beaucoup aidé et fonctionne un traitement pour obtenir le nombre de jours d'une date. –

+0

Merci! Je cherchais celui qui donne un résultat négatif, cela m'a beaucoup aidé! – pattyd

+1

Pour une raison quelconque hier est -2 ..... ce qui s'est passé? – pattyd

7

Jours format minutes et secondes:

// 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' class FTW –

+0

Selon http://php.net/manual/en/ref.datetime.php' -> days' (par exemple) n'est pas une classe valide méthode. Pouvez-vous s'il vous plaît modifier votre code pour utiliser '-> format ('d')', '-> format ('m')', etc, donc c'est plus clair pour ceux qui visitent? – Wes

+0

Pour l'enregistrement - J'ai mis à jour pour l'utilisation de 'DateTime' - ne peux pas croire la réponse acceptée en utilisant' DateTime' dans la solution. – Wes

-1

Je viens de rencontrer cela dans mon code pour une application en direct où le système considéré incorrectement aujourd'hui et demain comme aujourd'hui. Nous venons d'entrer dans British Summer Time et cela a causé un problème avec notre application.

J'utilise maintenant ce qui suit, ce qui me donne le résultat correct:

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

Bien sûr, en utilisant la classe DateTime est la meilleure solution va de l'avant ...

+1

C'est exactement le même code que [a déjà été posté ici] (http://stackoverflow.com/a/8807610/447356) et vous venez de changer les noms des variables. -1 pour essayer d'obtenir un représentant pour le travail des autres et de perdre notre temps. –

+0

Merci SW mais malheureusement cette solution n'a pas fonctionné pour moi: elle me donne 0 pour 2014-03-31 en me disant que c'est la date pour aujourd'hui (c'est le 30 mars maintenant au Royaume-Uni).J'ai ajouté +1, ce qui le corrige pour moi. –

+0

Donc, vous devriez le mettre en évidence dans votre message en liant à cette autre réponse et en expliquant que vous venez d'ajouter 1 pour le faire fonctionner. S'il vous plaît faites le montage et faites le moi savoir. –

Questions connexes