Affichage des dates

Eléphant du PHP | 164 Messages

19 avr. 2010, 06:25

Bonjour, j'ai un soucis avec l'agenda que j'ai créé.
Il est censé m'afficher une liste de date (auxquelles sont attachées des évènements ... bla bla bla).

Cela marche parfaitement depuis plusieurs mois /année SAUF pour UNE date !

Il m'affiche deux fois le 31 octobre ... je ne sais pas pourquoi !
Voici mon code et le résultat :

Code :

Code : Tout sélectionner

<?php $ddd = "2010-10-29"; $eee = "2010-11-07"; //Pour les conversions de dates : $monthesFR = array('','janvier','f&#233;vrier','mars','avril','mai','juin','juillet','ao&#251;t','septembre','octobre','novembre','d&#233;cembre'); $daysFR = array('Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'); $tDeb = explode("-", $ddd); $debut = mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]); $tFin = explode("-", $eee); $fin = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]); for ($d=$debut; $d<=$fin; $d++){ //On repasse les timestamps en vraies dates $date_first = $daysFR[date('w', $d)]; $date_second = $monthesFR[date('n', $d)]; $ladatedujour = date('Y', $d).'-'.date('m', $d).'-'.date('d', $d); echo $ladatedujour.'<br />'; $d = $d + "86399"; } ?>
Résultat :
2010-10-29
2010-10-30
2010-10-31
2010-10-31
2010-11-01
2010-11-02
2010-11-03
2010-11-04
2010-11-05
2010-11-06
Une idée de pourquoi JUSTE CETTE DATE s'affiche en double ???

ViPHP
ViPHP | 5462 Messages

19 avr. 2010, 10:01

hello,
pour le date en français t'embetes pas y'a strftime pour ca, pareil pour les parser (explode + mktime), strtotime est la pour toi, d'ailleur strtotime sera plus pratique que ton +86399 (en plus c'est 86400), tu feras juste "+1 day"
:wink:

EDIT d'ailleurs tu peux utiliser la fonction DatePeriod

Eléphant du PHP | 164 Messages

10 juin 2010, 05:54

Désolé j'ai un peu tardé à la réponse ...

En fait j'ai tout qui fonctionne et qui tourne ... plusieurs pages qui utilisent ce procédé ... ça m'arrangerait VRAIMENT de conserver mon code ;) Si toutefois il est impossible de le débugger je verrai mais si je pouvais le conserver ça serait top cool !!!

Au fait inutile de le préciser mais toutes les dates de ma bdd sont du type : AAAA-MM-JJ.

Merci pour votre aide, car je ne parviens pas à enlever ce doublon sur le 31 octobre !
J'ai remis 86400 ... je ne sais plus pourquoi j'ai fais -1 ... probablement pas pour rien ... ou pas !

EDIT :
J'ai remplacé $d++ par $d dans mon for du coup.

Si je met 2011 en année j'ai le résultat suivant :
2011-10-29
2011-10-30
2011-10-30
2011-10-31
2011-11-01
2011-11-02
2011-11-03
2011-11-04
2011-11-05
2011-11-06
Cette fois c'est le 30 novembre qui est en double ... est ce que quelqu'un peut m'expliquer pourquoi CETTE date et seulement fin novembre ? Je pige pas où est le bug ni comment il se produit en fait !

EDIT 2 : si je met en date du 1er janvier au 31 decembre je n'ai pas le doublon, si je remet du 29 octobre au 07 novembre c'est le bug ... gasp !

Eléphant du PHP | 164 Messages

10 juin 2010, 06:16

Je viens de tester un truc à la mode "Manouche" et ça marche. En fait je rajoute des secondes à ma valeur d'affichage.
<?php
$ddd = "2010-10-29";  
$eee = "2010-11-07";  

$tDeb = explode("-", $ddd);  
$debut = mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
				   
$tFin = explode("-", $eee);
$fin = mktime(0, 0, 0, $tFin[1], $tFin[2], $tFin[0]);
			
for ($d=$debut; $d<=$fin; $d += "86400"){
    $ladatedujour = date('Y', $d+"20000").'-'.date('m', $d+"20000").'-'.date('d', $d+"20000");
	echo $ladatedujour.' ('.$d.')<br />';
}
?>
Résultat :
2010-10-29 (1288303200)
2010-10-30 (1288389600)
2010-10-31 (1288476000)
2010-11-01 (1288562400)
2010-11-02 (1288648800)
2010-11-03 (1288735200)
2010-11-04 (1288821600)
2010-11-05 (1288908000)
2010-11-06 (1288994400)
2010-11-07 (1289080800)

ViPHP
ViPHP | 5462 Messages

10 juin 2010, 09:51

tu t'embete beaucoup
$tDeb = explode("-", $ddd);  
$debut = mktime(0, 0, 0, $tDeb[1], $tDeb[2], $tDeb[0]);
===
$debut = strtotime($ddd);
$ladatedujour = date('Y', $d+"20000").'-'.date('m', $d+"20000").'-'.date('d', $d+"20000");
===
$ladatedujour = date('Y-m-d', $d+"20000");

Eléphant du PHP | 164 Messages

10 juin 2010, 11:19

LOL ah oui effectivement ! Le plus flagrant est encore la deuxième solution ! Faut juste prendre le temps de se relire MDR

Mais comment ça se fait que sans mettre le +20000 ça met deux fois la même date (avec un timestamp pourtant bon) et que ça décale toute la suite ? comprend pas moi

ViPHP
ViPHP | 5462 Messages

10 juin 2010, 11:37

LOL ah oui effectivement ! Le plus flagrant est encore la deuxième solution ! Faut juste prendre le temps de se relire MDR

Mais comment ça se fait que sans mettre le +20000 ça met deux fois la même date (avec un timestamp pourtant bon) et que ça décale toute la suite ? comprend pas moi

parce que le 31 octobre on change d'heure :mrgreen:

ViPHP
ViPHP | 5462 Messages

10 juin 2010, 11:56

utilise le +1 day y'aura pas de soucis
$debut = strtotime('2010-10-29');  
$fin   = strtotime('2010-11-07'); 
$date  = $debut;
 
while($temp = strtotime('+1 day', $date))
{    
    echo date('Y-m-d', $temp) . '<br />';
        
    if($temp >= $fin)
    {
        break;
    }
    else
    {
        $date = $temp;
    }
}

Eléphant du PHP | 164 Messages

10 juin 2010, 13:50

MERCI