Comment comparer deux dates en PHP?
Dans la base de données, la date ressemble à 2011-10-2.
Si je voulais comparer la date d'aujourd'hui à la date de la base de données pour voir laquelle est la plus grande, comment procéderais-je?
J'ai essayé ça,
$today = date("Y-m-d");
$expire = $row->expireDate //from db
if($today < $expireDate) { //do something; }
mais ça ne marche pas vraiment comme ça. Quelle est une autre façon de le faire?
Mise à jour: Je sais que ce billet est un peu vieux, mais je voulais juste mentionner carbone, une classe utilisée avec laravel mais pouvant être utilisée avec le php classique et faisant des merveilles avec les dates. vérifier: Carbon
dans la base de données la date ressemble à ceci 2011-10-2
Stockez-le dans AAAA-MM-JJ et la comparaison de chaînes fonctionnera, car '1'> '0', etc.
Si toutes vos dates sont postérieures au 1er janvier 1970, vous pouvez utiliser quelque chose comme:
$today = date("Y-m-d");
$expire = $row->expireDate; //from database
$today_time = strtotime($today);
$expire_time = strtotime($expire);
if ($expire_time < $today_time) { /* do Something */ }
Si vous utilisez PHP 5> = 5.2.0, vous pouvez utiliser la classe DateTime:
$today_dt = new DateTime($today);
$expire_dt = new DateTime($expire);
if ($expire_dt < $today_dt) { /* Do something */ }
Ou quelque chose dans ce sens.
Juste pour complimenter les réponses déjà données, voir l’exemple suivant:
$today = new DateTime('');
$expireDate = new DateTime($row->expireDate); //from database
if($today->format("Y-m-d") < $expireDate->format("Y-m-d")) {
//do something;
}
Mise à jour: ou utilisation simple old-school date () fonction:
if(date('Y-m-d') < date('Y-m-d', strtotime($expire_date))){
//echo not yet expired!
}
Je ne le ferais pas avec PHP. Une base de données doit savoir quel jour on est (utilisez MySQL-> NOW () par exemple), il sera donc très facile de comparer dans la requête et de renvoyer le résultat, sans aucun problème en fonction des types de date utilisés.
SELECT IF(expireDate < NOW(),TRUE,FALSE) as isExpired FROM tableName
$today = date('Y-m-d');//Y-m-d H:i:s
$expireDate = new DateTime($row->expireDate);// From db
$date1=date_create($today);
$date2=date_create($expireDate->format('Y-m-d'));
$diff=date_diff($date1,$date2);
//echo $timeDiff;
if($diff->days >= 30){
echo "Expired.";
}else{
echo "Not expired.";
}
$today_date=date("Y-m-d");
$entered_date=$_POST['date'];
$dateTimestamp1 = strtotime($today_date);
$dateTimestamp2 = strtotime($entered_date);
$diff= $dateTimestamp1-$dateTimestamp2;
//echo $diff;
if ($diff<=0)
{
echo "Enter a valid date";
}
Voici un moyen d'obtenir le différence entre deux dates en quelques minutes.
// set dates
$date_compare1= date("d-m-Y h:i:s a", strtotime($date1));
// date now
$date_compare2= date("d-m-Y h:i:s a", strtotime($date2));
// calculate the difference
$difference = strtotime($date_compare1) - strtotime($date_compare2);
$difference_in_minutes = $difference / 60;
echo $difference_in_minutes;
J'ai eu ce problème aussi et je le résous par:
$today = date("Ymd");
$expire = str_replace('-', '', $row->expireDate); //from db
if(($today - $expire) > $NUMBER_OF_DAYS)
{
//do something;
}
Vous pouvez utiliser un simple PHP pour comparer les dates:
$date = new simpleDate();
echo $date->now()->compare($expire_date)->isBeforeOrEqual();
Cela vous donnera vrai ou faux.
Vous pouvez consulter les tutoriels pour plus d'exemples. S'il vous plaît cliquez ici .
Vous pouvez simplement vérifier ..
if ($startdate < $date) {// do something}
if ($startdate > $date) {// do something}
mais les deux dates doivent être au même format
Y-m-d ou d-m-Y
etc.
Trouvez la réponse sur un blog et c'est aussi simple que:
strtotime(date("Y"."-01-01")) -strtotime($newdate))/86400
Et vous aurez les jours entre les 2 dates.
tout d’abord, essayez de donner le format que vous voulez à la date/heure actuelle de votre serveur:
Obtenir la date actuelle
$ current_date = getdate ();
Séparez la date et l'heure pour les gérer comme vous le souhaitez:
$ current_date_only = $ current_date [year] .'- '. $ current_date [mon] .'-'. $ current_date [mday]; $ current_time_only = $ current_date ['hours']. ':'. $ current_date ['minutes']. ':'. $ current_date ['seconds'];
Comparez-le selon que vous utilisez donly date ou datetime dans votre base de données:
$ today = $ current_date_only. ' '. $ current_time_only;
ou
$ aujourd'hui = $ current_date_only;
if ($ today <$ expireDate)
j'espère que ça aide
Voici comment faire pour obtenir la différence en jours entre deux dates avec PHP. Notez l'utilisation de '!' dans le format pour ignorer la partie heure des dates, grâce aux informations de DateTime createFromFormat sans heure .
$today = DateTime::createFromFormat('!Y-m-d', date('Y-m-d'));
$wanted = DateTime::createFromFormat('!d-m-Y', $row["WANTED_DELIVERY_DATE"]);
$diff = $today->diff($wanted);
$days = $diff->days;
if (($diff->invert) != 0) $days = -1 * $days;
$overdue = (($days < 0) ? true : false);
print "<!-- (".(($days > 0) ? '+' : '').($days).") -->\n";