Page 1 sur 1
Comparaison de date
Posté : 08 août 2007, 16:11
par boubbae
Slt à tous
Je suis débutant et j'ai un soucis avec les dates.
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
Posté : 08 août 2007, 16:14
par Genova
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.
Posté : 08 août 2007, 16:15
par d0m
transforme tes dates en timestamp avec la fonction
mktime().
Posté : 08 août 2007, 16:18
par Ryle
Posté : 08 août 2007, 16:25
par boubbae
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 ?
Posté : 17 août 2007, 10:35
par boubbae
Personne n'a d'idée ?
Posté : 17 août 2007, 10:56
par zeus
le mois ne doit pas commencer par un 0

Posté : 17 août 2007, 11:01
par d0m
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
Posté : 17 août 2007, 11:40
par boubbae
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 ?
Posté : 17 août 2007, 11:51
par d0m
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.
Posté : 17 août 2007, 15:12
par boubbae
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 ?
Posté : 17 août 2007, 15:18
par d0m
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.
Posté : 17 août 2007, 15:30
par boubbae
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]
Posté : 17 août 2007, 15:36
par ouckileou
Salut,
utilise les balises
quand tu postes du code, et pense à passer ton sujet en [Résolu]
Posté : 17 août 2007, 15:41
par boubbae
OK pardon.
Merci encore.