Étant donné une certaine date, quel est le moyen le plus facile de déterminer combien de jours avant cette date (en PHP)? J'essaie de construire un widget de décompte, Merci!
<?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";
?>
En développant la réponse de schnaader, voici une fonction à une ligne qui prend une chaîne de date comme paramètre mais ne renvoie que le nombre de jours:
<?php
function days_until($date){
return (isset($date)) ? floor((strtotime($date) - time())/60/60/24) : FALSE;
}
?>
Format jours, 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;
Ne traitez pas les dates comme des nombres entiers. Utilisez votre base de données, qui offre un bon support pour gérer les calendriers/heures.
select datediff("2009-11-12", now())
PHP 5.3 a introduit la classe DateTime qui implémente une fonction 'diff'. Voir http://www.php.net/manual/fr/datetime.diff.php
Je viens de trouver cela dans mon code pour une application en direct où le système considérait à tort aujourd'hui et demain comme aujourd'hui. Nous venons d’entrer dans l’heure d’été britannique et cela a posé 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, utiliser la classe DateTime est la meilleure solution pour l'avenir ...