Comparaison de date

Eléphanteau du PHP | 11 Messages

08 août 2007, 16:11

Slt à tous

Je suis débutant et j'ai un soucis avec les dates. :oops:
Dans ma base j'ai une date du genre "01-01-2007 10:00". Je voudrais comparer cette date à la date du jour -7 "$date7 = date("d-m-Y H:i", time()-7*24*3600);". j'arrive bien à récupérer les 2 dates mais quand je fais une comparaison, il me compare que les jours "if($date7<<$datebase)".
En fait je veux que suivant la date une page s'ouvre. Si la datebase est inférieure à date7 tu ouvres et dans le cas contraire tu ouvres une autre page. Mon code fonctionne très bien sauf qu'au lieu de comparer la date complète (01-01-2007 10:00), il compare juste le 1er chiffre soit le jour.

Est-ce que quelqu'un a une idée :?:

Merci

ViPHP
ViPHP | 928 Messages

08 août 2007, 16:14

Bonjour,
pour comparer des dates en PHP tu dois utiliser des timestamp.

Converti la date de ta base de donnée en timestamp via la fonction mktime() pour cela.

PS : l'opérateur de comparaison "inférieur à" est < et non pas << qui est un opérateur de décalage binaire.

d0m
Mammouth du PHP | 1141 Messages

08 août 2007, 16:15

transforme tes dates en timestamp avec la fonction mktime().

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

08 août 2007, 16:18

Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

08 août 2007, 16:25

Slt

Je viens d'essayer plusieurs trucs et rien ne fonctionne. Par contre je viens de m'apercevoir que le champ de ma base SQL n'est pas de type DATE, il est en VARCHAR. Est-ce que ça peut poser problème ?

J'ai essayé ça pour calculer l'écart de jour entre ma datebase et la date d'aujourd'hui :
$date = Array('annee'=>2007, 'mois'=>08, 'jour'=>09); // la date de départ 
$aujourdhui = time(); // le timestamp d'aujourd'hui 

$time = mktime(0, 0, 0, $date['mois'], $date['jour'], $date['annee']); 
$ecart = $aujourdhui - $time;  
$ecart = floor($ecart / 3600 / 24);  
echo $ecart.' jours<br />'; 
$ecart = floor($ecart / 365);  
echo $ecart.' années'; 
Le soucis, c'est normalement en mettant la date d'aujourd'hui en date de départ je devrais trouver 0 jours mais il me dis 252 jours.

Quelqu'un a une idée ?

Eléphanteau du PHP | 11 Messages

17 août 2007, 10:35

Personne n'a d'idée ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

17 août 2007, 10:56

le mois ne doit pas commencer par un 0 ;)
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

d0m
Mammouth du PHP | 1141 Messages

17 août 2007, 11:01

c'est pas super de compter les jours en fonctions des secondes par exemple les jours ou on perds une heure (heure d'été) ca peut poser problèmes.
Le mieux c'est de comparer via les dates.
$ecart_annees = date('Y') - date('Y',$time);// Y donne l'année
$ecart_jours  = date('z') - date('z',$time) + 365*$ecart_annees //z donne le jour de l'année

Eléphanteau du PHP | 11 Messages

17 août 2007, 11:40

Exact ZEUS, j'ai enlevé le zéro et ça marche. Merci.
Par contre peux-tu me dire comment puis-je mettre en variable le jour ($j), le mois($m) et l'année ($y) à partir d'une date donnée (17-08-2007). Je pense que le format de ma date n'est pas correct car dans ce cas ma variable $m va être 08 et non 8 et du coup mon écart ne va plus marcher.

Est-ce que c'est possible ou pas sans changer le format de ma date ?

d0m
Mammouth du PHP | 1141 Messages

17 août 2007, 11:51

Ta date est une chaine de caractères, tu peux utiliser la fonction explode pour découper ta date en 3 variables contenant les 3 chaines que tu peux ensuite transformer en entier avec la fonction intval

Normalement avec la transformation en entier le 0 devant devrait disparaitre.

Eléphanteau du PHP | 11 Messages

17 août 2007, 15:12

Voila ce que j'ai fait mais je ne comprend pas pourquoi ça ne marche pas :
$datebase = "02-08-2007 10:00";
list($date) = explode("-",$datebase);
echo "Jour :$date[0]<br>";
echo "Mois : $date[1]<br>";
echo "Année : $date[2]<br>";

Normalement, $date[0] = 02, $date[1] = 08 et $date[2] = 2007. Le résultat que j'obtiens est $date[0] = 0, $date[1] = 2 et $date[2] = "vide".
Donc j'ai fait ça :
$datebase = "02-08-2007 10:00";
list($date) = explode("-",$datebase);
echo "Jour :$date[1]<br>";
echo "Mois : $date[4]<br>";
echo "Année : $date[6789]<br>";

Là j'obtiens bien 2-8 mais rien pour l'année.

Avez-vous une idée ?

d0m
Mammouth du PHP | 1141 Messages

17 août 2007, 15:18

pas besoin de list
$date = explode("-",$datebase);
te crée le tableau automatiquement.

ensuite il faut enlever l'heure de $database sinon elle sera avec l'année.

Eléphanteau du PHP | 11 Messages

17 août 2007, 15:30

C'est bon, je viens d evoir mon erreur.
C'est pas list($date) = explode("-",$datebase); mais $date = explode("-",$datebase);

C'est bon j'ai réussi. Voici le code pour ceux que ça interesse :
$datebase = "02-08-2007 10:00";
list($date) = explode(" ", $datebase);
$date_jma = explode("-", $date);
$mois = intval($date_jma[1]);
echo "Jour : $date_jma[0]<br>";
echo "Mois : $mois<br>";
echo "Année : $date_jma[2]<br>";
Là j'obtiens bien 02 8 2007.

Merci à tous[/i]

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

17 août 2007, 15:36

Salut,

utilise les balises
 quand tu postes du code, et pense à passer ton sujet en [Résolu]

Eléphanteau du PHP | 11 Messages

17 août 2007, 15:41

OK pardon.

Merci encore.