IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

comparer deux dates


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut comparer deux dates
    Bonjours,
    je viens vers vous pour un truc simple dont je n'arrive pas a faire.
    Je stock des dates aux formats datetime dans ma BDD et j'aimerais les comparer avec la date actuel et seulement si il y a une différence de plusieurs minutes 10 par exemple recharger la page.
    Autrement j'arrive bien a dire qu'elle date est supérieur par rapport a l'autre ou l'inverse, mais pas comment trouver cette différence de minutes .

  2. #2
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Bonsoir,

    Fonction TIMEDIFF().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TIMEDIFF(NOW(),'2012-08-27 23:05:00')

  3. #3
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Pourquoi si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TIMEDIFF(NOW(),'2012-08-28 15:05:00')
    J'obtiens: -15:51:05 ?
    Par ce que j'ai besoin de savoir pour ma condition si il y a une différence de 5minutes par exemple, mais aussi de plusieurs jours.

    PS: comment je récupère le résultat ? car d'habitude je fais comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $reponse = $bdd->query('SELECT * FROM table') or die(print_r($bdd->errorInfo()));
     
    while ($donnees = $reponse->fetch())
    {
    $nom = $donnees['nom']; 
    echo $nom;
    } $reponse->closeCursor();

  4. #4
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    J'obtiens: -15:51:05 ?
    Parce que le 28 c'est demain, donc la différence est négative...
    Sinon il faut faire l'inverse.
    Pour les jours utilises plutôt DATEDIFF().

    Pour ton résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $reponse = $bdd->query('SELECT TIMEDIFF(NOW(),'2012-08-28 15:05:00') AS duree') or die(print_r($bdd->errorInfo()));
     
    while ($donnees = $reponse->fetch())
    {
    $nom = $donnees['duree']; 
    echo $nom;
    } $reponse->closeCursor();

  5. #5
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Désoler pour ce message envoyé tout seule

  6. #6
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    j'ai bon: ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php
    $drz= '00:18:00';
    // on se connecte à MySQL
    $db = mysql_connect("localhost", "root", "");
     
    // on sélectionne la base
    mysql_select_db('film',$db);
     
    // on crée la requête SQL
    $sql = 'SELECT TIMEDIFF(NOW(),"2012-08-27 23:40:00") AS test';
    // $sql = 'SELECT TIMEDIFF(,"2012-08-27 23:05:00") AS test';
     
    // on envoie la requête
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    // on fait une boucle qui va faire un tour pour chaque enregistrement
    while($data = mysql_fetch_assoc($req))
        {
        // on affiche les informations de l'enregistrement en cours
        echo $data['test'];
    echo '<br>';
    			if($data['test'] >= $drz)
    				{
    echo 1;
    				}
    			else
    				{
     
    				}
        }

  7. #7
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Y a que toi qui peu savoir si tu as bon ^^

    Regarde comme ca c'est un peu plus propre de mettre ta condition dans ta requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    $drz= '2012-08-28 00:18:00';
    // on se connecte à MySQL
    $db = mysql_connect("localhost", "root", "");
     
     
    // on crée la requête SQL
    $sql = "SELECT CASE WHEN MINUTE(TIMEDIFF(NOW(),'".$drz."')) < 10 THEN 'oui' ELSE 'non' END AS duree";
     
    // on envoie la requête
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    // on fait une boucle qui va faire un tour pour chaque enregistrement
    while($data = mysql_fetch_assoc($req))
        {
        // on affiche les informations de l'enregistrement en cours
        echo $data['duree'];
    echo '<br>';
    		if($data['duree'] == 'oui')
    				{
    					echo 1;
    				}
    			else
    				{
    					echo 2;
    				}
        }

  8. #8
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Pour faire mes tests j'ai obtenu ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    $reponse = $bdd->query('requete sql') or die(print_r($bdd->errorInfo()));
    while ($donnees = $reponse->fetch())
    {
    $titre = $donnees['titre'];
    $datetest1 = $donnees['datetest1'];
     
     
     
     $sql = 'SELECT TIMEDIFF(NOW(), "'.$datetest1.'") AS test';
    // $sql = 'SELECT TIMEDIFF("2012-08-28 00:05:00", NOW()) AS test';
     
    // on envoie la requête
    $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
     
    // on fait une boucle qui va faire un tour pour chaque enregistrement
    while($data = mysql_fetch_assoc($req))
        {
        // on affiche les informations de l'enregistrement en cours
        echo 'difference de <b>'.$data['test'].'</b>mins';
    echo ' - ';
     
    // $drz1= '60:00:00';
    $drz1= '48:00:00';
    $drz2= '24:00:00';
    $drz3= '00:10:00';
    $drz4= '00:05:00';
     
     
    			if($data['test'] >= $drz1)
    				{
    echo 'Plus de  '. $drz1.' - '.$titre;
    				}
    			elseif($data['test'] >= $drz2)
    				{
    echo 'Plus de  '.$drz2.' - '.$titre;
    				}
    			elseif($data['test'] >= $drz3)
    				{
    echo 'Plus de  '.$drz3.' - '.$titre;	
    				}
    			elseif($data['test'] >= $drz4)
    				{
    echo 'Plus de  '.$drz4.' - '.$titre;	
    				}
    			else
    				{
    	echo 'RIEN - '.$titre;
    				}
    	}		
    echo '<br>';	
    } $reponse->closeCursor();
    Comme tu le vois, je sors une date de ma table et donc suivant cette date je vais obtenir une différence qui ira de la plus grande a la plus petite et fait un update de la date et donc si j'obtiens moins de 5minutes ils se passera "rien".
    Donc je dois avoir plusieurs variable $drz(nom pourrie), je ne vois donc pas comment je peux utilisé ta supers requête malheureusement

    Après je vois pas comment faire autrement, je bloque trop sur les date.

    PS: ta requête rend le truc simple, je ne sais pas en faire des comme ça^^

  9. #9
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Euuh là c'est pas beau

    Ca serait cool de mettre un peu d'ordre dans ton code pour que ce soit plus sympa à lire.

  10. #10
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    C'est pour tester, ça a l'aire de marcher pour le moment.

    Le code est simple, ça me sort ma date de ma BDD, calcul la différence et commence d'abord pas la plus grande et descend dans la durée.
    Ce qui s'affiche par exemple:
    différence de 00:04:26 - 00:10:00 - RIEN - le titre
    donc pour le moment la différence est de 4minute et quand ça sera a plus de 10minutes ça recharge la page.
    Le but c'est de ne recharger la page qu'a intervalle régulier autrement ça utilise juste ma BDD.


    J'ai juste un problème, j'aimerais que ça recharge par exemple, qu'une fois par heure les dates qui on une différence d'un jour par exemple sauf que la on dirait que ça fait tout.
    Donc si j'ai bien compris je fais un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(($data['test'] >= $drz1) AND ($data['test'] <= $drz2))
    Ca regarde si la différence est supérieure 48h, mais pas inférieur de 24h.
    J'espère que j'ai bon.


    J'ai un problème ?

    00:06:53 >= 240:00:00 AND 00:06:53 <= 720:00:00
    00:06:53 >= 120:00:00 AND 00:06:53 <= 48:00:00
    00:06:53 >= 48:00:00 AND 00:06:53 <= 24:00:00
    00:06:53 >= 24:00:00 AND 00:06:53 <= 48:00:00
    00:06:53 >= 10:00:00 AND 00:06:53 <= 24:00:00
    00:06:53 >= 05:30:00 AND 00:06:53 <= 10:00:00
    00:06:53 >= 01:00:00 AND 00:06:53 <= 05:30:00
    00:06:53 >= 00:30:00 AND 00:06:53 <= 01:00:00
    00:06:53 >= 00:20:00 AND 00:06:53 <= 00:30:00
    C'est pour recharger seulement certaine date, c'est pour voir si il y a pas un problème dans mes conditions.

  11. #11
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Le problème c'est que ça peut faire toute les conditions en même temps et ça serait bien de les faire une a la fois voir même chaque condition l'une après l'autre et chaque ligne après l'autre par ce que si tout est fait en même temps ça ralentit tout

  12. #12
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $drzJ0= '240:00:00';
    $drz0= '120:00:00';
    elseif(($data['test'] >= $drz0) AND ($data['test'] <= $drzJ0))
    $data['test'] c'est la l'heure a tester sauf que ça me teste des 22:20:56 par exemple, alors que ça ne rentre pas dans la condition;
    Il compare de 20:00:00 a 24:00:00 comme si il ignore le reste

  13. #13
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Tu ne pourras pas les comparer comme çà, là tu compares des chaines de caractères pas des durées.

    Tu as essayé de reprendre mon code en entier ? Et de faire ton test du côté SQL ?

  14. #14
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Le problème c'est que je test des dates et si c'est comprit dans la durée que j'ai choisis je charge un code donc je peut pas y mettre dans la requête comme ça doit être dans une boucle.

    Ca marche sauf quand ça devient supérieure a 24h, moi je pensais que c'était une date normale et qu'après elle se contait en H.
    Donc je ne sais pas comment faire.

    Sinon on peut faire un cron sous windows avec wamp ?


    En plus j'ai pas compris cette partie en gras:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CASE WHEN MINUTE(TIMEDIFF(NOW(),'2012-08-28 ".$drz."')) < 10 THEN 'oui' ELSE 'non' END AS duree

  15. #15
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Si tu veux comparer des dates regarde la fonction : strtotime().

    Oui, on peu faire sauf que sur Windows ça s’appelle "Une tâche planifiée".

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CASE WHEN MINUTE(TIMEDIFF(NOW(),'".$drz."')) < 10 THEN 'oui' ELSE 'non' END AS duree

    En effet je me suis trompé ta variable $drz contient une date au format DATETIME SQL.

  16. #16
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Comment j’obtiens le nombre d'heures, minutes, jours... de différence ? Car la j'ai juste oui ou non.
    Si j'ai bien piger avec cette requete:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CASE WHEN HOUR(TIMEDIFF(NOW(), "2012-08-28 12:26:45")) > 2 THEN "oui" ELSE "non" END AS duree
    c'est si l'heure actuel est superieur a l'autre date de deux heure alors "oui" sinon "non".
    C'est ça ?


    ET si j’utilise un timestamp ?
    je fais donc: NOW()-$date_de_ma_BDD et si le nombre qui reste est supérieure 300(5minutes), 3600(une heure)... rechargement, ça peut marcher ?

  17. #17
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CASE WHEN HOUR(TIMEDIFF(NOW(), "2012-08-28 12:26:45")) > 2 THEN "oui" ELSE "non" END AS duree

    Cette requête te donneras 'oui' si il y a plus de 2 heures entre des dates, sinon non.

    Sinon :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DATEDIFF(NOW(), "2012-08-28 12:26:45")
    Te retourneras le nombre de jours qui séparent les deux dates.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TIMEDIFF(NOW(), "2012-08-28 12:26:45")
    Te retourneras le nombre d'heures, minutes, secondes, qui séparent les deux dates au format HH:MM:SS.

  18. #18
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    Je te remercie de m'aider.


    Me comparaisons sont comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $drz1= '00:20:00';
    $drz2= '00:10:00';
    $drz3= '00:05:00';
    $drz4= '00:03:00';
     
    if(($data['test'] >= $drz2) AND ($data['test'] <= $drz1))
          {
          }
    elseif(($data['test'] >= $drz4) AND ($data['test'] <= $drzJ3))
          {
          }
    else
          {
          }
    J'obtiens la différence '00:10:00' par exemple qui est dans $data['test'] et je compare a mes différente variables pour ne charger que ce qui est dans cette différence.
    Tout marche sauf si c'est supérieure a 24h et c'est la que je bloque, car il faut que ça soit dynamique.

    Je pense que je vais tout convertir en seconde.
    Donc date actuel - date dans ma bdd et je compare au nombre:
    pour une heure: 3600sec
    pour un jour: 86400sec
    pour un mois: 2592000sec
    je convertit en seconde comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT UNIX_TIMESTAMP("2012-05-26 10:10:10")  AS duree
    j'ai bon ?

  19. #19
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 503
    Par défaut
    Pour info,

    L'objet Datetime travaille très bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $datetime1 = new DateTime('2009-10-11');
    $datetime2 = new DateTime('2009-10-12');
    $interval = $datetime1->diff($datetime2);
     
    $drz1= '20';
    $drz2= '10';
    $drz3= '5';
    $drz4= '3';
    $drz5= '1';
     
     
    var_dump($interval->format('%i') > $drz3); //sup à 5 minutes false
    var_dump($interval->format('%a') > $drz3); //sup à 5 jours   false
    var_dump($interval->format('%a') == $drz5); //inf à 1 jours   true

  20. #20
    Membre confirmé
    Homme Profil pro
    Employé magasin
    Inscrit en
    Août 2012
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé magasin

    Informations forums :
    Inscription : Août 2012
    Messages : 197
    Par défaut
    MERCI, j'ai beaucoup progresser, j'ai donc fait un système de seconde pour comparer les dates, mais il faut pas qu'il y en est trop en même temps, mais ça marche.

Discussions similaires

  1. Comment comparer deux dates
    Par vodevil dans le forum Modules
    Réponses: 6
    Dernier message: 01/09/2005, 18h24
  2. comparer deux dates
    Par adel25 dans le forum C++
    Réponses: 3
    Dernier message: 23/08/2005, 20h29
  3. Comparer deux dates
    Par LoicH dans le forum C++Builder
    Réponses: 4
    Dernier message: 04/03/2005, 22h53
  4. comment comparer deux dates?
    Par billoum dans le forum C++Builder
    Réponses: 2
    Dernier message: 21/08/2004, 21h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo