Comment comparer deux dates en PHP


108

Comment comparer deux dates en php si les dates sont au format '03_01_12'et '31_12_11'.

J'utilise ce code:

$date1=date('d_m_y');
$date2='31_12_11';
if(strtotime($date1) < strtotime($date2))
   echo '1 is small ='.strtotime($date1).','.$date1;
else
   echo '2 is small ='.strtotime($date2).','.$date2;

Mais ça ne marche pas.



duplication possible de PHP - Date de comparaison
Wesley Murch

Réponses:


42

Vous devrez vous assurer que vos dates sont des objets de date valides.

Essaye ça:

$date1=date('d/m/y');
$tempArr=explode('_', '31_12_11');
$date2 = date("d/m/y", mktime(0, 0, 0, $tempArr[1], $tempArr[0], $tempArr[2]));

Vous pouvez ensuite exécuter la strtotime()méthode pour obtenir la différence.


2
Pourquoi pas str_replace?
self.name

36

Utilisation de DateTime :: createFromFormat :

$format = "d_m_y";
$date1  = \DateTime::createFromFormat($format, "03_01_12");
$date2  = \DateTime::createFromFormat($format, "31_12_11");

var_dump($date1 > $date2);

1
Lorsque vous utilisez d # m # Y, n'importe lequel des séparateurs pris en charge ;, :, (, ), /, ., ,, -fonctionnera.
Rijk

9

La fonction date_diff () renvoie la différence entre deux objets DateTime.

Si la première date est antérieure à la deuxième, un nombre positif de jours sera retourné; sinon un nombre de jours négatif:

<?php
$date1=date_create("2013-03-15");
$date2=date_create("2013-12-12");
$diff=date_diff($date1,$date2);
echo $diff->format("%R%a days");
?>

la sortie sera "+272 jours";

modification de $ date1 = "15/03/2014"

 <?php
    $date1=date_create("2014-03-15");
    $date2=date_create("2013-12-12");
    $diff=date_diff($date1,$date2);
    echo $diff->format("%R%a days");
    ?>

La sortie sera "-93 jours"


8
<?php
       $expiry_date = "2017-12-31 00:00:00"
       $today = date('d-m-Y',time()); 
       $exp = date('d-m-Y',strtotime($expiry_date));
       $expDate =  date_create($exp);
       $todayDate = date_create($today);
       $diff =  date_diff($todayDate, $expDate);
       if($diff->format("%R%a")>0){
             echo "active";
       }else{
           echo "inactive";
       }
       echo "Remaining Days ".$diff->format("%R%a days");
?>

Pouvez-vous s'il vous plaît ajouter quelques explications?
Prafulla Kumar Sahu

8

Ne pas répondre au problème réel des OP, mais répondre uniquement au titre. Puisque c'est le meilleur résultat pour "comparer les dates en php".

Assez simple à utiliser les objets Datetime ( php >= 5.3.0) et à les comparer directement

$date1 = new DateTime("2009-10-11");
$date2 = new DateTime("tomorrow"); // Can use date/string just like strtotime.
var_dump($date1 < $date2);

L'objet de la classe DateTime n'a pas pu être converti en chaîne
Hikaru Shindo

7

En étendant la réponse de @ nevermind, on peut utiliser DateTime :: createFromFormat: like,

// use - instead of _. replace _ by - if needed.
$format = "d-m-y";
$date1  = DateTime::createFromFormat($format, date('d-m-y'));
$date2  = DateTime::createFromFormat($format, str_replace("_", "-",$date2));    
var_dump($date1 > $date2);

4

vous pouvez essayer quelque chose comme:

        $date1 = date_create('2014-1-23'); // format of yyyy-mm-dd
        $date2 = date_create('2014-2-3'); // format of yyyy-mm-dd
        $dateDiff = date_diff($date1, $date2);
        var_dump($dateDiff);

Vous pouvez alors accéder à la différence de jours comme ceci $ dateDiff-> d;


Hey! merci, il y avait une petite faute de frappe dedans le caractère ']' non? c'est proche de la touche Entrée, je dois l'avoir appuyée aussi. Merci pour votre attention.
Frederick G.Sandalo

3

Je ne sais pas quel est votre problème, mais:

function date_compare($d1, $d2)
{
    $d1 = explode('_', $d1);
    $d2 = explode('_', $d2);

    $d1 = array_reverse($d1);
    $d2 = array_reverse($d2);

    if (strtotime(implode('-', $d1)) > strtotime(implode('-', $d2)))
    {
        return $d2;
    }
    else
    {
        return $d1;
    }
}

3

Essaye ça

$data1 = strtotime(\date("d/m/Y"));
$data1 = date_create($data1);
$data2 = date_create("21/06/2017");

if($data1 < $data2){
    return "The most current date is date1";
}

return "The most current date is date2";

2

comparer le résultat de maketime()pour chacun des temps


2

Je sais que c'est tard, mais pour référence future, mettez le format de date dans un format reconnu en utilisant str_replace, votre fonction fonctionnera. (remplacez le trait de soulignement par un tiret)

//change the format to dashes instead of underscores, then get the timestamp
$date1 = strtotime(str_replace("_", "-",$date1));
$date2 = strtotime(str_replace("_", "-",$date2));

//compare the dates
if($date1 < $date2){
   //convert the date back to underscore format if needed when printing it out.
   echo '1 is small='.$date1.','.date('d_m_y',$date1);
}else{
   echo '2 is small='.$date2.','.date('d_m_y',$date2);
}

2

Vous pouvez convertir pour un nombre entier et comparer.

Par exemple.:

$date_1 = date('Ymd');
$date_2 = '31_12_2011';

$date_2 = (int) implode(array_reverse(explode("_", $date_2)));

echo ($date_1 < $date_2) ? '$date_2 is bigger then $date_1' : '$date_2 is smaller than $date_1';

1

Je pense que celui-ci est une fonction très simple

function terminateOrNotStringtoDate($currentDate, $terminationdate)
{
    $crtDate = new DateTime($currentDate);
    $termDate = new DateTime($terminationdate);
    if($crtDate >= $termDate)
    {
        return true;
    } else {
    return false;
    }
}

0

Les gars, s'il vous plaît, ne le rendez pas si complexe La réponse simple ci-dessous

$date1=date('d_m_y');
$date2='31_12_11';
$date1=str_replace('_', '-', $date1);
$date2=str_replace('_', '-', $date2)
if(strtotime($date1) < strtotime($date2))
   echo '1 is small ='.strtotime($date1).','.$date1;
else
   echo '2 is small ='.strtotime($date2).','.$date2;

Je viens d'ajouter deux autres lignes avec votre code


-1

Si les deux dates sont dans le même format, utilisez un opérateur de comparaison.

$date1 = "2018-05-05"; 
$date2 = "2019-08-19"; 

//comparison operator to  

if ($date1 > $date2) {
    echo "$date1 is latest than $date2"; 
    }
else{
    echo "$date1 is older than $date2"; 
    }

Sortie: 2018-05-05 est plus ancienne que 2019-08-19


Cela ne fonctionnera que si les dates sont au format ISO 8601.
Dharman
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.