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 num » 26 sept. 2007, 15:07

donc je n'ai pas changer mon code mais mes date sont toute au format aaaa/mm/jj, donc comme ça ça marche mais pas avec les dates 0000/00/00
vous auriez une idee ou faut que je filtre toute mes dates (vu quelle pe être null ou pas)

merci

par num » 25 sept. 2007, 14:06

bon j'ai changer mon code mais ça me donne pas du tout les bonne dates
<?php
			$datenull='00/00/0000';
	  echo $row[1].' date arr '.$row[2]. ' date '.$date.' datenull '.$datenull; 
			$datedem = Array('annee'=>date('Y', strtotime($row[1])), 'mois'=>date('m', strtotime($row[1])), 'jour'=>date('d', strtotime($row[1])));
			$datedem = mktime(0, 0, 0, $datedem['mois'], $datedem['jour'], $datedem['annee']);
			$datedem = date('Y-m-d', $datedem);
			$datearr = Array('annee'=>date('Y', strtotime($row[2])), 'mois'=>date('m', strtotime($row[2])), 'jour'=>date('d', strtotime($row[2])));
			$datearr = mktime(0, 0, 0, $datearr['mois'], $datearr['jour'], $datearr['annee']);
			$datearr = date('Y-m-d', $datearr);
			$datejrs = Array('annee'=>date('Y', strtotime($date)), 'mois'=>date('m', strtotime($date)), 'jour'=>date('d', strtotime($date)));
			$datejrs = mktime(0, 0, 0, $datejrs['mois'], $datejrs['jour'], $datejrs['annee']);
			$datejrs = date('Y-m-d', $datejrs);
			$datejrs = Array('annee'=>date('Y', strtotime($datenull)), 'mois'=>date('m', strtotime($datenull)), 'jour'=>date('d', strtotime($datenull)));
			$datenull = mktime(0, 0, 0, $datenull['mois'], $datenull['jour'], $datenull['annee']);
			$datenull = date('Y-m-d', $datenull);
	  if 
(
    (
        ( $datedem < $datejrs ) 
        and 
        ( $datedem != $datenull ) 
	)
    or 
    (
        ( $datearr < $datejrs ) 
         and 
        ( $datearr != $datenull )
	)
)  { 
	  echo $datedem.' date arr '.$datearr. ' date '.$datejrs.' datenull '.$datenull; ?>
pour mon premier echo cela me donne :
date dem=00/00/0000
datearr=&8/10/2007
date du jour=25/09/2007
date null=00/00/0000

sur mon deuxieme cela me donne
date dem=1999-11-30
date arr=1970-01-01
date du jour=array
date null=1999-11-30


voila
je n'ai pas trouver + d'aide que ça dans les tutos

merci

par AB » 25 sept. 2007, 11:38

Vas faire un tour dans la rubrique Tutauriaux de ce site. Ensuite tu cliques sur "liste des tutauriaux" et il doit y avoir quelque chose sur les dates (comparaison etc.)

par num » 25 sept. 2007, 11:28

la franchement je comprend pas tout.
Mes dates, $row[1], $row[2] et date sont au format jj/mm/aaaa
je ne peux pas comparé plusieurs date a ce format ?

merci

par Ryle » 25 sept. 2007, 11:21

Hum... et bien évidement, tu as regardé la documentation pour voir comment fonctionnait la fonction date() et quelles paramètes il fallait lui passer, avant de l'utiliser ? :roll:

On peut donc être assuré que ta variable $row[1] contient "Le format de la date désirée, en fonction des options de formattage." et que ton but est de retourner la date du jour formatée selon ce paramètre.
Et cela en dépit de ce que pourrait laisser penser cet usage de la fonction : date('00/00/0000') qui n'a pour effet que de retourner la chaine '00/00/0000' :?:

par num » 25 sept. 2007, 10:09

SI
(
(row1 < date)
et (row1 non renseigné)
)
ou
(
(row2 < date)
et (row2 non renseigné)
)
c'est bien ça sauf que c'est row1 renseigné et row2 renseigné


quand je met
 ( date($row[1]) != NULL ) 
cela ne marche pas j'ai essayé :
 ( date($row[1]) != '' ) 
y a t il un autre moyen ?

merci

Re: probleme comparaison date

par zeus » 20 sept. 2007, 19:40

Bonsoir.

Alors, j'ai essayé de réindenter ton code pour comprendre ce que tu essayais de faire et :
1/ tu mets beaucoup trop de parenthèses.
(date($row[1]))
et
date($row[1])
sont équivalents

2/ tu as un décalage dans les parenthèses, une bonne indentation le montre clairement
if 
(
	(
		(
			(date($row[1])) < (date($date))
		) and 
		(
			( 
				(date($row[1])) != (date('00/00/0000'))
			)
		) or 
		(
			( 
				(date($row[2])) < (date($date))
			) and 
			(
				(
					(
						(date($row[2]))!=((date('00/00/0000')))
					)
				)
			)
En supprimant toutes les parenthèses inutiles, j'arrive à
if 
(
	(
		( date($row[1]) < date($date) ) 
		and 
		( date($row[1]) != date('00/00/0000') ) 
		or 
		(
			( date($row[2]) < date($date) ) 
			and 
			( date($row[2]) != date('00/00/0000') )
3/ tes conditions sont bizarre
Comment une date peut être vide si elle est inférieure à aujourd'hui ?

Si j'ai bien compris ce que tu cherches à faire, tu devrais avoir un truc du genre

Code : Tout sélectionner

SI ( (row1 < date) et (row1 non renseigné) ) ou ( (row2 < date) et (row2 non renseigné) )
Essaye de partir de mon algo pour reconstruire tes conditions ;)

par AB » 20 sept. 2007, 17:16

vache.... ça c'est du code lisible, on comprend de suite les conditions à remplir pour rentrer dans le if :)
ça me rappelle les vieilles macros que je faisais avec Excel :lol:

par Ryle » 20 sept. 2007, 17:07

vache.... ça c'est du code lisible, on comprend de suite les conditions à remplir pour rentrer dans le if :)

A noter que le forum FAQ contient des explications détaillées sur les dates :
:arrow: Quelques petites manipulations avec les dates (PHP/MySQL)

probleme comparaison date

par num » 20 sept. 2007, 16:49

Bonjour,

Bon tout d'abord jai bien regarder les poste et les tuto qui traitais de se sujet mais je vois pas mon probleme.

Voila pour savoir si je dois faire executer ma requete je doi savoir si 2 dates qui sont afficher de ma requete sont superieur ou inferieur a la date du jour.

Donc pour mon code cela donne :
if ((((date($row[1]))<(date($date))) and (((date($row[1]))!=(date('00/00/0000')))) or (((date($row[2]))<(date($date))) and ((((date($row[2]))!=((date('00/00/0000')))))) {
j'ai essayé aussi avec strtotime a la place de date mais cela ne fonctionne pas.

cela ne m'affiche pas le bon resultat.

merci d'avance