web-dev-qa-db-fra.com

Comment comparer deux dates en PHP?

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

120
Sarmen B.

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.

75
Matthew

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.

208
Hugo Peixoto

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! 
}   
20
d.raev

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
6
Dr.Molle
$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.";
}
4
Atif Mahmood
$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";
   }
2
Shruthi reddy

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;
2
Syno

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; 
}
1
PiotrK

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 .

1
isa

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.

0
sanjyot

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.

0
kooli

tout d’abord, essayez de donner le format que vous voulez à la date/heure actuelle de votre serveur:

  1. Obtenir la date actuelle

    $ current_date = getdate ();

  2. 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'];

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

0
ernestoloredo

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";
0
nwsmith