web-dev-qa-db-fra.com

Combien de jours avant la date X-Y-Z?

É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!

24
JD Isaacks
<?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";
?>
49
schnaader

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;
}
?>
25
Jeff Hines

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;
8
Alejandro Moreno

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())
7
troelskn

PHP 5.3 a introduit la classe DateTime qui implémente une fonction 'diff'. Voir http://www.php.net/manual/fr/datetime.diff.php

7
schuilr

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 ...

0
Bashir Patel