Page 1 sur 1

problème mktime je supose

Posté : 06 févr. 2009, 19:53
par dogmongo
Bonjour,

Il y a quelques mois j'ai developper mon propre scripts calendrier dynamique, aujourd'hui je viens de me rendre compte qu'il ne fonctionne plus correctement , quelqu'un d'un niveau bien superieur au miens en php pourrait il m'expliquer mon erreur ?

j'ai aussi remarqué que la class que le membre Cobaye avait posté sur le site section contribution fait exactement le même bug.

j'ai retirer tout le système dynamique du scripts pour le rendre plus lisible

un grand merci d'avance :wink:

ci-desous mon scripts
<?php
$url ="test.php";

// je déclare les variables de base jour mois annéee ou bien je les récupère via url
if(empty($mois)) $mois = date("m");

if(empty($annee)) $annee = date("Y");
 
if(empty($jour)) $jour = date("j");

$aff_mois = date("M",mktime(0,0,0,$mois,-1,$annee)); 

$aff_annee = date("Y",mktime(0,0,0,$mois,0,$annee)); 

$nb_jour_mois = date("t",mktime(0,0,0,$mois,1,$annee)); 

$premier_jour_du_mois = date("w",mktime(0,0,0,$mois,1,$annee));

$aujourdhui = date('j');

$jourdelasemaine  = date('w', mktime(0,0,0,$mois,$jour,$annee));

$datefinmois= date("Y-m-d", mktime(0,0,0,$mois,$jour,$annee));

if( $mois < 10 ){ $news_mois = "0".$mois; }else{ $news_mois = $mois; }

$condition1 = "$annee-$news_mois-00"; 

$condition2 = "$annee-$news_mois-$nb_jour_mois";

$result = checkdate("$annee","$news_mois","$nb_jour_mois");

$date = time();

$new_annee = strftime("%G", $DB_Date_info);


	$AFF_cal.= "<table style=\"font-size:11px;\">
	<tr>
	<td colspan=\"7\" style=\"color:#FFFFFF; padding:10px; height:30px; text-align:center;\"><span class=\"titre2\" >".$aff_mois. " " .$annee."</span></td></tr>
	<tr style=\"color:#FFFFFF; background-color:#000000; padding:2px; height:25px; text-align:center; \">
	<td> lu </td>
	<td> ma </td>
	<td> me </td>
	<td> je </td>
	<td> ve </td>
	<td> sa </td>
	<td> di </td>
	</tr>\n";

    $cell=0;
	$week=0;
	$casevide = 0; // jour de la semaine démarre à 0
	$newsdate= 1; 

	for( $e=0; $e < $nb_jour_mois + $premier_jour_du_mois - 1 ; $e++ ){
	$casevide++;
	$week++;
		
if($casevide >= $premier_jour_du_mois){ 

				 if( $week >= 6 ){
				 
				 
// style en week end
		if($newsdate == $aujourdhui && date("Y") == $annee && date("m") == $mois){ // aujourd'hui en week end

$result[$e].= " style=\"color:RED; background-color:#FFFFFF; padding:1px; border: 0px solid #004E99; width:20px; height:25px; text-align:center; \">$newsdate " .$even[$newsdate][$mois][$annee]."" .$even_mail[$newsdate][$mois][$annee]." ";
		
		}else{
		
$result[$e].= " style=\"color:#FFFFFF; background-color:#003366; padding:1px; border: 0px solid #004E99; width:20px; height:25px; text-align:center; \">$newsdate " .$even[$newsdate][$mois][$annee]."" .$even_mail[$newsdate][$mois][$annee]." ";
		
		}
						

($week == 7)? $week=0 : "";
				 
				 }else if($newsdate == $aujourdhui && date("Y") == $annee && date("m") == $mois){ // aujourd'hui
				 
			if( $week >= 6 ){ // aujourd'hui et en week end
			$result[$e].=" style=\"color:#003366; background-color:#ffffff; padding:1px; border: 0px solid #000000; width:20px; height:25px; text-align:center; \">".$newsdate;
			}
						
				 }else{
				
				 $result[$e].=" style=\"color:#003366; background-color:#84A1BE; padding:1px; border: 0px solid #009900; width:20px; height:25px; text-align:center; \">$newsdate " .$even[$newsdate][$mois][$annee]."" .$even_mail[$newsdate][$mois][$annee]." "; 
				 
    }

		$newsdate++;
		
		}else{
	    $result[$e].=""; 
		}
		
}
	
	
	
	
//génère le calendrier 
for( $n = 0 ; $n < $nb_jour_mois + $premier_jour_du_mois ; $n++ ) {
 
         $AFF_cal.= ($cell == 0)? "<tr>\n" : "";
		 
         $AFF_cal.= ($result[$n]!="")? "<td ".$result[$n]."</td>\n" : "<td> </td>\n";
		 
         $cell ++;
		
         $AFF_cal.= ($cell == 7)? "</tr>\n" : "";
	     
		 $cell = ($cell == 7)? 0 : $cell;
		 
}

// je déclare mes variable anne pour la navigation
$annee_pre = $annee;
$annee_next = $annee;

// je paramaitre ma navigation par mois
		if($mois==1){
		$M_previous = 12; 
		$annee_pre = $annee_pre -1;
		}else{
		$M_previous = $mois - 1;
		}

		if($mois==12){
		$M_next = 1 ;
		$annee_next = $annee_next +1;
		}else{
		$M_next = $mois + 1;
		}		
		
// je paramètre ma navigation par année
		$A_previous = $annee - 1 ;
		$A_next = $annee + 1 ;
		
$AFF_cal.= "
<tr style=\"color:#FFFFFF; background-color:#003366; padding:2px; height:25px; text-align:center;\">
<td colspan=\"3\">
	
<a href=\"" .$url. "?mois=$M_previous&annee=$annee_pre\" style=\"font-size:8px;\"><img src=\"images/left.jpg\" width=\"11\" height=\"11\" border=\"0\"/></a> Mois 
<a href=\"" .$url. "?mois=$M_next&annee=$annee_next\" style=\"font-size:8px;\"><img src=\"images/right.jpg\" width=\"11\" height=\"11\" border=\"0\"/></a>
</td>

<td colspan=\"1\"></td>
   
<td colspan=\"3\">
<a href=\"" .$url. "?annee=$A_previous&mois=$mois\" style=\"font-size:8px;\"><img src=\"images/left.jpg\" width=\"11\" height=\"11\" border=\"0\"/></a>
Année <a href=\"" .$url. "?annee=$A_next&mois=$mois\" style=\"font-size:8px;\"><img src=\"images/right.jpg\" width=\"11\" height=\"11\" border=\"0\"/></a>	
</td>   

</tr>
</table>\n";

echo $AFF_cal ;
?>
voir le problème en direct

http://www.evdog.com/test.php

Posté : 06 févr. 2009, 23:12
par jojolapine
Et quel est ce bug dont tu parles?
Le calendrier de Cobaye ne souffre pas de bugs connus...
Regarde la différence entre http://www.olecorre.com/calendar/ et http://www.evdog.com/test.php?mois=2&annee=2009
On voit que tu as tes jours du mois décalé de 1 par rapport aux jours de la semaine...

Posté : 06 févr. 2009, 23:57
par dogmongo
Oui tu as raison, j'ai été induit en erreur à cause de la disposition qui est diffère de la mienne, en tout cas ca ne change rien et n'arrange pas mon problème :)

Posté : 07 févr. 2009, 00:02
par jojolapine
A mon avis, c'est justement cette différence qui fausse ton calendrier, je n'ai pas regardé en détail ta manière de faire, mais en anglais (et don en programmation en général) les semaines commencent le dimanche, d'ou l'erreur que tu as...

Posté : 07 févr. 2009, 11:36
par dogmongo
oui tu as raison, les autres mois je n'ai pas eu de problème, ce mois si le premier jour tombe un dimanche et ca foire :!: bizzare


je ré-edit mon message
j'ai trouvé l'erreur :

si quelqu'un veut ce servir de mon scripts qu'il remplace
$premier_jour_du_mois = date("w",mktime(0,0,0,$mois,$jour,$annee));
par
(date("w",mktime(0,0,0,$mois,$jour,$annee))==6)? $premier_jour_du_mois= 7:$premier_jour_du_mois = date("w",mktime(0,0,0,$mois,1,$annee));
la fonction date("w"... renvoi 6 quand le premier jour de la semaine commence un dimanche ce qui fausse le résultat, une simple condition à suffit à recaler tout ca :wink:

Merci jojolapine tu ma bien aidé sur ce coup :wink: