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

Langage PHP Discussion :

Comparaison de date


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut Comparaison de date
    Bonjour,
    J'ai un petit problème dans mon code, dans celui ci je compare des dates, et cette comparaison ne fonctionne pas tout le temps.
    Voila le code :

    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
     
    $xml = read_xml("_xml/".$filename.".xml","contain",$tab);
    foreach($xml as $row){
    			if(ereg("([0-9]{2})/([0-9]{2})/([0-9]{4}) ([0-9]{2}):([0-9]{2})", $row[6],$regs1) && ereg("([0-9]{2})/([0-9]{2})/([0-9]{4}) ([0-9]{2}):([0-9]{2})", $row[7],$regs2) && ereg("([0-9]{2})/([0-9]{2})/([0-9]{4}) ([0-9]{2}):([0-9]{2})", $row[9],$regs3)){
    $message1 = $row[0];
    				$message2 = $row[1];
    				$message3 = $row[2];
    				$message4 = $row[3];
    				$message5 = $row[4];
    				$message6 = $row[5];
     
    				$date_order = date("d/m/Y H:i",mktime($regs1[4],$regs1[5],0,$regs1[2],$regs1[1],$regs1[3]));
    				$date_completion = date("d/m/Y H:i",mktime($regs2[4],$regs2[5],0,$regs2[2],$regs2[1],$regs2[3]));
    				$date_completion_less = date("d/m/Y H:i",mktime($regs2[4],$regs2[5],0,$regs2[2],$regs2[1]-1,$regs2[3]));
     
    				$message7 = $row[8];
     
    				$date_requested = date("d/m/Y H:i",mktime($regs3[4],$regs3[5],0,$regs3[2],$regs3[1],$regs3[3]));
     
    				$current_date = date("d/m/Y H:i",mktime($regs2[4],$regs2[5],0,date("m"),date("d"),date("Y")));
    				$current_date_xml_graph = date("dmY",mktime(0,0,0,date("m"),date("d"),date("Y")));
     
    if($current_date >=	$date_completion){
    					echo '<div id="view_case_first_red">'.$message1.'</div>';
    					echo '<div id="view_case_next_red">'.$message2.'</div>';
    					echo '<div id="view_case_next_red">'.$message3.'</div>';
    					echo '<div id="view_case_next_red">'.$message4.'</div>';
    					echo '<div id="view_case_next_red">'.$message5.'</div>';
    					echo '<div id="view_case_next_red">'.$message6.'</div>';
    					echo '<div id="view_case_next_red">'.$date_order.'</div>';
    					echo '<div id="view_case_next_red">'.$date_completion.'</div>';
    					echo '<div id="view_case_next_red">'.$message7.'</div>';
    					echo '<div id="view_case_next_red">'.$date_requested.'</div>';}
    en fait à certains moment il m'affiche des date ayant pour année 2009...ce qui n'est pas normal vu que nous sommes en 2008.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Août 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 7
    Par défaut Comparaison
    Salut ^^

    Je suis pas une bête dans foreach^^ mais tu aurais je pense surement plus simple a faire avec des extrations par date directement dans ta requete non ?

    je ne sais pas comment ce compose ta base et combien tu as de champs comtenant des dates, j'aurais bien aimer voir ce que donne comme résultat ton tableau avec ton "foreach" je pense qu'il y aurait moyen d'arrivée au même résultat

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut
    En fait les date sont extraites d'un fichier xml et non pas d'une base

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Je n'ai pas épluché ton code, mais une comparaison de dates au format 'd/m/Y H:i' ne peut pas fonctionner. Il faut les avoir au format 'Y/m/d H:i'.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut
    Pourquoi cela ne peut fonctionner, il se base sur quelque chose de spécial ?

  6. #6
    Membre éprouvé Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut
    J'ai fait un peu de reccherche :

    -Tu converti tes dates en timestamp Unix avec mktime()
    http://fr2.php.net/manual/fr/function.mktime.php

    -Tu les compares

    -Tu refait une date si besoin
    avec date().

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Un petit exemple valant mieux qu'un long discours, essaie ce code et tu comprendras tout de suite pourquoi :
    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
    <?php
      echo 'test avec format d/m/Y<br>';
      $dateDeb = '31/06/2008';
      $dateFin = '10/08/2008';
      if ($dateDeb > $dateFin)
        echo 'date début + grande';
      elseif ($dateDeb < $dateFin)
        echo 'date fin + grande';
     
      echo '<br><br>';
      echo 'test avec format Y/m/d<br>';
      $dateDeb = '2008/06/31';
      $dateFin = '2008/08/10';
      if ($dateDeb > $dateFin)
        echo 'date début + grande';
      elseif ($dateDeb < $dateFin)
        echo 'date fin + grande';
    ?>
    Dans les deux cas, les dates sont les mêmes, seul change le format.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut
    Elles sont déja converties avec mon code date("...",mktime(...));

    En fait je change le format, je vais tester cela.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut
    J'ai essayé ton code, puis modifié le mien, en effet cela marche mieux, ce qui serait intéressant de savoir, c'est pourquoi ??

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Parce que les dates sont des chaînes (string), la comparaison se fait donc de la gauche vers la droite (tri alphabétique).
    Si tu reprends la première partie de mon exemple, la date de début commence par 3 et de fin par 1. La date de début est donc plus grande que la date de fin.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut
    Ok, merci de l'explication, tout de suite, cela parait plus claire.

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Autre chose : la valeur de l'attribut 'id' d'un élément html doit être unique dans la page. Or dans ton code, 9 éléments 'div' ont la même valeur pour cet attribut.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 288
    Par défaut
    Bas pourtant c'est un style, on peut rappeler le style autant de fois que l'on veut dans la page !

  14. #14
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Dans ce cas, utilise l'attribut 'class', et non pas 'id'.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comparaison de dates javascript
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/07/2005, 09h45
  2. comparaison de dates
    Par pmithrandir dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/06/2005, 17h12
  3. comparaison de date
    Par nickoshiba dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/03/2005, 16h48
  4. Comparaison de dates
    Par Tapioca dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/06/2004, 16h55
  5. Problème de comparaison de dates
    Par MiJack dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/03/2004, 22h43

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