Page 1 sur 1

les années bisextiles

Posté : 02 avr. 2009, 11:36
par davidb
tout est dit dans le texte sauf que je cherche a recup les années bisextiles sur une periode de 2 ans avant la date du jour et de 3 ans apres

<?
	$an =time();//date du jour
	$an=date('Y',$an);
    echo $an;echo"<br>";
	$an=mktime(0,0,0,1,1,$an);
	echo $an;echo"<br>";
	$az=date('d/m/y',$an);
	echo $az;echo"<br>";
	$datedeb=$an-((3*365*24*60*60)+(*366*24*60*60));
	echo date('l d/m/Y',$datedeb);echo"<br>";
	$datedeb=$an+((4*365*24*60*60)+(1*366*24*60*60));
	echo date('l d/m/Y',$datedeb);echo"<br>";
?>
là j essai juste de gerer les années bisextiles et j arrive pas puisque selon l'année en cours y en a 1=une ou y en a pas et quand je recup l'année en chiffre a partir du timestamp on peut pas faire de calcul avec sa (si je fais 2009-1 sa fait 1970..)

une idée pour sa?

Posté : 02 avr. 2009, 14:12
par Ryle
Tu peux utiliser plusieurs méthodes pour savoir si ton année est bissextile ou pas...

D'après la définition ce sont les années divisibles par 4, mais pas par 100 sauf si elles sont divisibles par 400 :
( $annee%4 == 0 && ($annee % 100 != 0 || $annee % 400 == 0) )
Sinon, tu peux aussi simplement tester le nombre de jour du mois de février :)
( cal_days_in_month(CAL_GREGORIAN, 2, $annee) === 29 )

Posté : 02 avr. 2009, 14:53
par davidb
Sinon, tu peux aussi simplement tester le nombre de jour du mois de février Smile
PHP:
( cal_days_in_month(CAL_GREGORIAN, 2, $annee) === 29 )
j'ai compris pour le call_days_in_month mais c est quoi cal_gregorian si c'est un calendrier sa va pas puisque je suis en train d en faire un avec ce que je vous ai donné plus d autre partie de mon code...bref je comprend pas trop

Posté : 02 avr. 2009, 15:15
par Nours312
Intervalle de validité pour le calendrier grégorien : 4714 avant JC à 9999 après JC.A.D.
CAL_GREGORIAN est une CONSTANTE php, qui informe la fonction sur le calendrier de référence quelle doit utiliser pour générer le résultat escompté !!

ce n'est pas à toi de le créer, ça permet d'utiliser cal_days_in_month()

voila ... @+

Posté : 02 avr. 2009, 15:17
par davidb
merci je vais voir sa si je peux l utiliser dans le contexte

edit 15h55 je ne peux pas utiliser sa parce que l'année -1 est a calculer avant de l'utiliser dans les parametres pour call days month

donc en fait sa fait une boucle tout sa pour voir si je dois mettre 366 ou 365 dans mon calcul du datedeb



ou alors j ai encore rien compris....


sauf que la bug parce que je ne veux pas 2009 dans le call sa sera 2008 2007 moi j ai besoin d un calcul style
if(( cal_days_in_month(CAL_GREGORIAN, 2, $annee-1) === 29 ) or ( cal_days_in_month(CAL_GREGORIAN, 2, $annee-2))
{
$datedeb=$an-((1*365*24*60*60)+(1*366*24*60*60));
	echo date('l d/m/Y',$datedeb);echo"<br>";
	$datefin=$an+((2*365*24*60*60)+(1*366*24*60*60));
	echo date('l d/m/Y',$datedeb);echo"<br>";
} 
else 
{
$datedeb=$an-((2*365*24*60*60));//2ans avant
	echo date('l d/m/Y',$datedeb);echo"<br>";
	$datefin=$an+(3*365*24*60*60)//3ans apres
	echo date('l d/m/Y',$datedeb);echo"<br>";
}


voila en gros ce que je veux et le probleme reste le -1 et -2 puisque si je fais $annee- n importe quoi j ai 1970...

Posté : 02 avr. 2009, 21:28
par niuxe
Salut Davidb,

<<<EDIT
voila en gros ce que je veux et le probleme reste le -1 et -2 puisque si je fais $annee- n importe quoi j ai 1970...
Je crois que tu as mal lu la doc se rapportant à la fonction date(). Je te propose de mieux regarder sachant que si je ne m'abuse, cette fonction ne prend que deux paramètres dont un optionnel (cf signature de la fonction).
EDIT;

En lisant ton code, cela me rappelle les bonnes soupes de tante Mathilde. La soupe qui reste coller à la casserole tellement qu'elle est compacte. Je te propose de regarder ceci :
<?php
$exclamation = "Oh, que c'est beau ! ";
$sujet ="Le soleil ";
$verbe = "brille ";
$complement = "dans le ciel.";

$phrase = $exclamation;
$phrase .= $sujet.$verbe.$complement ;

echo $phrase."<hr />";
?>
Pour ton soucis, cela me parait simple :
$annee_courante = date("Y");

$moins_2_ans = $annee_courante - 2;
$plus_3_ans = $annee_courante + 3;

for($annee = $moins_2_ans; $annee <= $plus_3_ans; $annee++){
	echo (cal_days_in_month(CAL_GREGORIAN, 2, $annee) === 29 )? $annee."<br />" : "";
}

@ Ryle => Je ne connaissais pas cal_days_in_month(). merci ! Juste une question : Pourquoi faire un test de comparaison aussi rigoureux (===) ? J'aurais mis simplement : "==".

++

Posté : 03 avr. 2009, 08:27
par davidb
$annee_courante = date("Y");

$moins_2_ans = $annee_courante - 2;
$plus_3_ans = $annee_courante + 3;
.... sa marche désolé de vous avoir dérangé pour sa j'arrivais pas à soustraire l'année avec ma methode et j'avais cru que l'année retournée n'etait pas calculable...