probleme comparaison date

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : probleme comparaison date

par jpaul » 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  :? )

par zeus » 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]

par jpaul » 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.

par franck53 » 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

Re: probleme comparaison date

par Victor BRITO » 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:

par franck53 » 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.

par sadeq » 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() ...

probleme comparaison date

par franck53 » 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