Comparer deux dates en php [Résolu/Fermé]

Signaler
-
 Jovial BANGA codeur -
Salut à tous.

J'aimerais avoir une petit infos svp.
J'aimerais savoir comment je peux comparer deux date en php.
C'est j'ai une variable $date_debut et une autre $date_fin et je voudrais afficher un message si la date de debut est superieur a la date de fin.

Merci par avance+
a+

13 réponses

Encore plus simple:
La fonction time() renvoi le nombre de seconde écoulées depuis le 1er janvier 1970
La fonction mktime permet de fabriquer un timestamp (nombre de seconde depuis le 1er janvier 1970)

Donc tu prends ta date, tu utilises mktime dessus (http://fr.php.net/manual/fr/function.mktime.php) et tu n'as plus qu'à comparer les deux nombres, le plus petit étant la date la plus ancienne

cela permet de prendre en compte les heures les minutes et les secondes sans se préoccuper des fuseaux horaires
61
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 78014 internautes nous ont dit merci ce mois-ci

ouai c'est ce quze je viens de dire depuis 2009 mais bon, c'etait moins bien dit ... :)
if(strtotime($date1) >= strtotime($date2))
{
}
Un astuce toute bête et très utiles pour comparer les dates en php:
http://blog.galerie-cesar.com/php-comparer-les-dates-astuce-tres-pratique/
Y plus facile:

if (new DateTime() < new DateTime('2009-08-27')) echo “dans le futur”;
Bonjour, en utilisant la POO :

// date à tester :
$now = date(’Y-m-d’);
$next = ‘2050-01-01′;

// test
$now = new DateTime( $now );
$now = $now->format(’Ymd’);
$next = new DateTime( $next );
$next = $next->format(’Ymd’);

if( $now < $next ) echo “next est dans le futur”;
else echo “next est dans le passé”;

La POO rend le code plus claire et lisible, parfois les commentaires ne sont même plus necessaire ! :)

Salutation.
Simple et efficace, j'adore.

trop beau gosse
salut

sinon utiliser la fonction mktime qui retourne le timestamp , puis tu compares les timestamps de tes 2 dates
Messages postés
2899
Date d'inscription
dimanche 30 juillet 2006
Statut
Modérateur
Dernière intervention
10 novembre 2019
703
Salut.

Voir :
http://www.wikistuce.info/doku.php/php/classe/operation_sur_les_dates

Si c'est des dates dans un BDD, c'est plus facile je crois.
merci c'est cool de ta part.
Les dates sont envoyé part un formulaire.
Je suis déja tombé sur ce petit tuto, il me parait un peut compliqué...
Donc c'est pourquoi je cherche un autre moyen sans trop surcharger mon code
AH ! je pense avoir trouvé, voici mon code et dites moi ce que vous en pensé. Ca à l'air de fonctionner.
=> date_en est une fonction qui me convertit ma date au format anglophone

if (strtotime (date_en($date_fin)) - strtotime (date_en($date_debut)) < 0)
echo "<br>la date de fin doit etre superieur à la date de début<br>";
slt
comment soutraire les week et les heures de la nuit dans le calcul de la difference entre 2 dates?????????????????????
Depuis la version 5.3 de PHP, le plus simple est d'utiliser une classe prédéfinie, DateInterval, résultante de la méthode "diff" de la classe DateTime...
Voir les sites PHP officiels à ce sujet...
Messages postés
2
Date d'inscription
vendredi 20 juillet 2012
Statut
Membre
Dernière intervention
25 juillet 2012

Je sais que ce post apparaît comme résolu mais bon, pour ceux qui ne seraient pas en PHP 5.3 (ou plus)...
Reste la solution PHP + MySQL qui fonctionne très bien ( et ne sera pas limitée à l'année 2038 comme toutes les fonctions liées au timestamp )...

Ma proposition de fonction ( à condition bien sur d'avoir établi une connexion MySQL avant ) :

/****************************************/
/* Fonction local_comparerDateSql() */
/* Renvoi 0 si dateA = dateB */
/* Renvoi 1 si dateA > dateB */
/* Renvoi -1 si dateA < dateB */
/****************************************/
function local_comparerDateSql($dateAFonc,$dateBFonc)
{
$reponse = 0;
$dateAFonc = trim($dateAFonc);
$dateBFonc = trim($dateBFonc);

if($dateAFonc!=$dateBFonc)
{
$resultat = mysql_query("select '".$dateAFonc."'>'".$dateBFonc."' as 'comparaison'");
$tabInfo = mysql_fetch_array($resultat);
$comparaison = $tabInfo["comparaison"];

if(bcmul($comparaison,1,0)==0) $reponse = -1;
else $reponse = 1;
}

return($reponse);
}


Exemple d'utilisation :
$testDate = local_comparerDateSql('2012-07-01','2012-07-14');
// Renvoi 1....
Je ne vois pas trop l'utilité de faire une requête mysql pour une comparaison de date en php, ca fait un peu usine a gaz
c'est clair :/
si vous avez la chance d'être en php 5.3 ou plus => DateTime
http://www.php.net/manual/fr/class.datetime.php
Messages postés
2
Date d'inscription
vendredi 20 juillet 2012
Statut
Membre
Dernière intervention
25 juillet 2012

Je suis totalement d'accord avec "Usine à gaz"...
Mais j'ai bien précisé que c'était utile pour ceux qui n'étaient pas en PHP 5.3...
Je crois que je l'ai précisé non...? Il me semble.... ;)
Bonjour à tous!

J'ai une table qui contient des dates sous cette forme date('d-m-Y à H:i:s'), et je souhaite créer un script qui permet d'extraire de cette table les dates qui sont > a 30 min donc tester sur la date et surtout sur minute, est ce que quelqu'un peut m'aider ? merci
Avec la méthode invert de l'objet $interval on obtient 0 si $datetime1 <= $datetime2 ou 1 si $datetime1 > $datetime2.

$datetime1 = new DateTime('jour-mois-année 00:00:00');
$datetime2 = new DateTime('jour-mois-année 00:00:00');
$interval = $datetime1->diff($datetime2);
echo $interval->invert;
if(isset($_POST['Enregistrer']) and($_POST['Date_fin']>=$_POST['Date_debut'])){
echo ' ok';
}
else
{
echo 'date début ne peut pas etre supérieure à la date de fin';
}