probleme comparaison date

franck53
Invité n'ayant pas de compte PHPfrance

05 oct. 2006, 15:29

Bonjour,
Voila, j'ai un souci avec le format date.
Lorsque je fais
if ($req[0] > $date) {echo "oui".' '.$req[0].' '.$date; } else { echo "non".' '.$req[0].' '.$date; }
Cela m'affiche : oui 15/09/2006 01/10/2006.

Il me dit donc que le 15/06/2006 est supérieur au 01/10/2006.

J'aimerais savoir ou est mon erreur.

Je precise que lorsque je tape les date, par exemple
if ("10/01/2006" > "15/01/2006") {echo "oui".' '."10/01/2006".' '."15/01/2006"; } else { echo "non".' '."10/01/2006"' '."15/01/2006"; }
cela m'affiche bien non.

Je ne comprend vraiment rien les date sont au même format que précédamment.

J'ai essayer de regarder partout mais impossible de trouver ma reponse ou tout au moins une aide.

Merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

05 oct. 2006, 15:53

d'où proviennent : $date et $req[0] ?
Les données de type date/heure ne doivent pas être considérées comme des chaînes même si elles peuvent être nottées en tant que tel.

Les données dates/heures sont formulées par défaut sous le format anglais "aaaa-mm-jj" et la meilleure façon de les utiliser dans la programmation est de les manipuler avec des fonctions spéciales.

Sous PHP, si tu veux utiliser alors des dates dans un calcul ou autres il faut penser à les formater correctement selon le format que tu veux.
Le formatage se fait par les fonctions : date(), getdate(), mktime(), strtotime() ...
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

franck53
Invité n'ayant pas de compte PHPfrance

05 oct. 2006, 16:12

les dates sont bien formaté vu que cela m'affiche 15/09/2006 01/10/2006.

$req[0], c'est pris a partir d'une de mes requetes.
$date c'est pris d'un de mes champs de saisie.

Donc a priori j'ai pas d'erreur a ce niveau.

Mammouth du PHP | 2937 Messages

05 oct. 2006, 16:40

Salut!
if ("10/01/2006" > "15/01/2006") {echo "oui".' '."10/01/2006".' '."15/01/2006"; } else { echo "non".' '."10/01/2006"' '."15/01/2006"; }
Là, tu compares deux chaînes de caractères, et non deux dates. En outre, il fallait plutôt utiliser le signe < plutôt que le signe >. :oops:

franck53
Invité n'ayant pas de compte PHPfrance

05 oct. 2006, 17:05

je ne comprend pas si je met < cela met bien oui. Mais je ne comprend pas dès que je fais des teste sur les dates, si ce n'est pas moi qui les tapes, si elle sont prisé dans la base ou dans un champs texte (après bien sur les avoir formaté de la même facon et bien cela ne marche pas).


quand je fais un echo $req[0] j'ai 15/09/2006 et un echo $date j'ai 01/10/2006. Donc je ne comprend pas pourquoi quand je fais
<?php if ($req[0] > $date) {echo "oui".' '.$req[0].' '.$date; } else { echo "non".' '.$req[0].' '.$date; }  
cela me met OUI

et quand je le fais manuellement, cela me donne bien le bon resultat.

merci davance

Eléphant du PHP | 451 Messages

09 oct. 2006, 10:17

Saut,

J'avais commencé à te répondre vendredi mais je n'ai pas eu le temps de finir et je n'était pas là ce week-end...
Comme te l'as dit sadeq, tu ne dois pas traiter les dates comme des chaines de caractères.
La fonction mktime me semble la plus adaptée dans ton cas voici un exemple de formulaire qui de donne les deux comparaisons (par chaîne et par date) :
echo "<form action=\"".$_SERVER["PHP_SELF"]."\" method=\"post\" name=\"formulaire\">";
echo "<BR><INPUT TYPE=TEXT NAME=\"DATE1\" VALUE=\"".$_POST[DATE1]."\">";
echo "<BR><INPUT TYPE=TEXT NAME=\"DATE2\" VALUE=\"".$_POST[DATE2]."\">";
echo "<BR><INPUT TYPE=SUBMIT>";
echo "</form>";
echo "<BR>DATE1=".$_POST[DATE1]." ".strtotime($_POST[DATE1]);
echo "<BR>DATE2=".$_POST[DATE2]." ".strtotime($_POST[DATE1]);
echo "<BR>Comparaison par chaîne : <BR>";
if ($_POST[DATE1] > $_POST[DATE2]) {
  echo $_POST[DATE1]." > ".$_POST[DATE2];
}
else {
  echo $_POST[DATE1]." < ".$_POST[DATE2];
}
echo "<BR>Comparaison par date : <BR>";
// On commence par extraite jour moi année
list($j1,$m1,$a1)=split("/",$_POST[DATE1]);
list($j2,$m2,$a2)=split("/",$_POST[DATE2]);
// la commande mktime à besoin des herures minutes secondes (on met 0)
if (mktime (0,0,0,$m1,$j1,$a1) > mktime (0,0,0,$m2,$j2,$a2)) {
  echo $_POST[DATE1]." > ".$_POST[DATE2];
}
else {
  echo $_POST[DATE1]." < ".$_POST[DATE2];
}
J'espère que ça t'aidera.
Modifié en dernier par jpaul le 09 oct. 2006, 14:30, modifié 1 fois.
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

09 oct. 2006, 11:19

modération : jpaul, tu fréquente PhpFrance depuis maintenant assez longtemp pour savoir qu'il est demandé d'utiliser les balises
 et [CODE] ;)[/color]
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 451 Messages

09 oct. 2006, 14:29

modération : jpaul, tu fréquente PhpFrance depuis maintenant assez longtemp pour savoir qu'il est demandé d'utiliser les balises
 et [CODE] ;)[/color][/quote] :oops: Désolé ! (en plus je voulais utiliser la balise php  :? )
Jpaul
J'essaye d'aider : parfois je fais des erreurs, on me les corrige et j'apprends un peu plus. Super ce forum :)