Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CALCUL ANNÉES BISSEXTILES


Information sur la source

Catégorie :Date / Heure Classé sous : date, bissextile Niveau : Débutant Date de création : 15/12/2006 Date de mise à jour : 16/12/2006 20:47:39 Vu / téléchargé: 10 441 / 99

Note :
Aucune note

Commentaire sur cette source (38)
Ajouter un commentaire et/ou une note

Description

fonction simple permettant de calculer les années bissextiles et facile à intégrer dans un script !
 

Source

  • <?php
  • /*
  • Une année est bissextile si :
  • 1. l'année est divisible par 4 mais non divisible par 100
  • 2. l'années divisible par 400
  • Ce calcul est exacte à compter du 15 octobre 1582, date de la réforme grégorienne
  • (passage du calendier julien au calendrier grégorien).
  • réf : http://www.imcce.fr/fr/actualites/archive.php?id=38
  • A partir de ces conditions on a juste à vérifier si les conditions 1 & 2
  • renvoient un entier (integer).
  • /*
  • /*
  • fonction : bissextile
  • */
  • function bissextile($annee) {
  • if( (is_int($annee/4) && !is_int($annee/100)) || is_int($annee/400)) {
  • // Année bissextile
  • // vous remplacez le retour par ce que vou voulez
  • return TRUE;
  • } else {
  • // Année NON bissextile
  • // vous remplacez le retour par ce que vou voulez
  • return FALSE;
  • }
  • }
  • /******************************************************
  • Exemple 1 : Tableau des années depuis 1582
  • */
  • $aa = 1582;
  • echo '<font color="#CC0000">Tableau des années bissextiles depuis ' . $aa . '</font><br>';
  • for($aa; $aa<=date('Y'); $aa++) {
  • if(bissextile($aa)) {
  • echo '<strong>' . $aa . ' : Bissextile</strong><br>';
  • } else {
  • echo $aa . ' : Non bissextile<br>';
  • }
  • }
  • /******************************************************
  • Exemple 2 : somme nous dans une année bissextile ?
  • */
  • echo '<hr/><font color="#CC0000">' . date('Y') . ' ';
  • echo bissextile(date('Y')) ? 'est' : 'n\'est pas';
  • echo ' bissextile.';
  • ?>
<?php
/*
Une année est bissextile si :
	1. l'année est divisible par 4 mais non divisible par 100
	2. l'années divisible par 400

Ce calcul est exacte à compter du 15 octobre 1582, date de la réforme grégorienne
(passage du calendier julien au calendrier grégorien).
réf : http://www.imcce.fr/fr/actualites/archive.php?id=38

A partir de ces conditions on a juste à vérifier si les conditions 1 & 2
renvoient un entier (integer).
/*


/*
fonction : bissextile
*/
function bissextile($annee) {
	if( (is_int($annee/4) && !is_int($annee/100)) || is_int($annee/400)) {
		// Année bissextile
		// vous remplacez le retour par ce que vou voulez
		return TRUE;
	} else {
		// Année NON bissextile
		// vous remplacez le retour par ce que vou voulez
		return FALSE;
	}
}


/******************************************************
Exemple 1 : Tableau des années depuis 1582
*/

$aa = 1582;

echo '<font color="#CC0000">Tableau des années bissextiles depuis ' . $aa . '</font><br>';

for($aa; $aa<=date('Y'); $aa++) {
	if(bissextile($aa)) {
		echo '<strong>' . $aa . ' : Bissextile</strong><br>';
	} else {
		echo $aa . ' : Non bissextile<br>';
	}
}

/******************************************************
Exemple 2 : somme nous dans une année bissextile ?
*/

echo '<hr/><font color="#CC0000">' . date('Y') . ' ';
echo bissextile(date('Y')) ? 'est' : 'n\'est pas';
echo ' bissextile.';

?>

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

15 décembre 2006 18:45:42 :
suite aux commentaires ajout des miens
15 décembre 2006 18:47:18 :
v1.1
16 décembre 2006 20:47:39 :
mise en page de la source

Commentaires et avis

signaler à un administrateur
Commentaire de coucou747 le 15/12/2006 15:25:37

pour un code aussi court, t'aurais pu afficher le code...

tu devrais remplacer tes " par des '

signaler à un administrateur
Commentaire de rrk275 le 15/12/2006 17:46:42

2/3 ptites choses .. un code comme ca a t il sa place ?
pourquoi faire une fonction que tu ne reutilise pas pour faire le tableau ?
moi je fais dans le synthetyique mais
function bissextile($annee) {
if( (is_int($annee/4) && !is_int($annee/100)) || is_int($annee/400)) {
return TRUE;
} else {
return FALSE;
}
}
c'est pleonasmique ..

Louis

signaler à un administrateur
Commentaire de pilou92 le 15/12/2006 18:38:11

rrk275 > L'avantage d'une fonction même courte, c'est justement de pouvoir l'utiliser comme un "objet" dans d'autres scripts. L'intéret n'est pas tant dans la construction du tableau, qui ne sert à rien pour controler ce qu'a saisi l'utilisateur, mais c'est de pouvoir vérifier si une année est bissextile en 1 ligne de code, en appelant la fonction : bissextile($annee). Elle peut etre utiliser par exemple avec ajax. Après chacun l'adapte à ses besoins (ex : a la place de TRUE du peut renvoyer 29 et de FALSE 28)

De plus, j'ai beaucoup vu de scripts de calcul d'années bissextiles écrits comme ça : if( (aa/4=0 && aa/100!=0) || aa/400=0 )
Or, cette condition est fausse et peut retouner des erreurs.

signaler à un administrateur
Commentaire de coucou747 le 15/12/2006 18:40:51

"L'avantage d'une fonction même courte, c'est justement de pouvoir l'utiliser comme un "objet""

euh.... détaille stp... j'ai peur de mal comprendre...

signaler à un administrateur
Commentaire de pilou92 le 15/12/2006 19:02:40

coucou74 > ce que je voulais dire par là, c'est que cette fonction peut être ajouter à une class et juste vérifié si la condition est vrai ou pas ... je me suis mal exprimé.

signaler à un administrateur
Commentaire de coucou747 le 15/12/2006 19:16:55

une fonction comme ça, dans une classe ??? euh... désolé, mais je penses que non... une fonction comme ça, ça ne traite pas un objet, ni un type, sauf si tu fais une classe date... mais là, ça va pas être bon, car il ne pourra pas traiter des résultats de mysql facilement... bref, une classe date n'est pas une bonne idée, et donc, cette fonction n'a rien à faire dans un objet...

Mais la laisser sous forme de fonction, moi je trouves ça bien

signaler à un administrateur
Commentaire de malalam le 15/12/2006 19:47:41 administrateur CS

Hello,

je suis plutôt contre les codes très courts dans cette section de CS, mais là...je pense que ça servira à certains. Donc oui, je pense qu'elle peut rester. Même si, je le répête...généralement, je n'accepte pas de code aussi court.
Evidemment, je préfèrerais la voir dans les snippets (http://www.codyx.org).

Je suis d'accord avec RRK275 pour ce qui concerne l'exemple : tu devrais utiliser ta fonction, tant qu'à faire.

Je ne suis pas d'accord avec Coucou, de telles fonctions peuvent très bien devenir des méthodes. Moi, j'ai des méthodes calculant des bornes de date, des delta, des délais, les jours ouvrés, etc...dans certains objets. Quand on fait une appli logistique, par exemple...Le tout est de structurer correctement ton modèle pour qu'il ne soit pas incohérent. Mais une classe (ou plusieurs) gérant ce genre de trucs me parait tout à fait viable.
T'es pas obligé de gérer 'est ce bien une année ? comment est-elle formattée? etc...' dans cette méthode précisément. Et à dire vrai, je pense même que ce n'est pas à une telle méthode de gérer ça. Une date est formattée, puis on l'utilise. Pas l'inverse : on l'utilise, mais on la formatte en même temps histoire de...

Mais bon, ça reste une question de point de vue et de façon de coder, après tout :-)

signaler à un administrateur
Commentaire de rrk275 le 15/12/2006 21:39:19

J'ai l'impression de mettre mal exprimé, et je m'en excuse si tu t'es senti attaqué ... je vais donc essayer de rattraper mes propos.

"pourquoi faire une fonction que tu ne reutilise pas pour faire le tableau ?"
Je voulais juste signaler que tant qu'a faire .. pourquoi ne pas l'utiliser.

"moi je fais dans le synthetyique mais
function bissextile($annee) {
if( (is_int($annee/4) && !is_int($annee/100)) || is_int($annee/400)) {
return TRUE;
} else {
return FALSE;
}
}
c'est pleonasmique .."
Je signalais que faire du
if(test)
return true;
else
return false;

c'était pleonasmique et que ca revenait à cela :

return test;// question de gout mais c'est aussi simple..

et puis je n'oserais pas remettre en cause un code que j'ai moi même programmer de maniere similaire dans le cadre de prologin ( .. un peu simple .. certes  ^^ )

Louis

signaler à un administrateur
Commentaire de coucou747 le 16/12/2006 10:27:41

quand tu fais du php, une date n'a aucune raison d'être un objet... c'est bien plus facile de la manipuler en tant que chaine ou que timestamp... pour un vrai soft, quand ton objet persiste, oui... pourquoi pas, mais là, non

signaler à un administrateur
Commentaire de Kirua le 16/12/2006 12:27:19

utiliser ajax et un script php pour déterminer si une année est bissextile sans recharger la page? la technologie vous tuera: on peut faire ça en javascript normal depuis dix ans!

signaler à un administrateur
Commentaire de sheorogath le 16/12/2006 12:42:49 administrateur CS

ca aurait ete bien que ce code gere les annees inferieur a 1584...

signaler à un administrateur
Commentaire de pilou92 le 16/12/2006 17:54:55

RRK275 > Non du tout, d'ailleur tu as raison sur le fait que j'aurai du utiliser la fonction pour illustrer l'exemple. Je vai refaire la source plus proprement.

coucou747 > je ne suis pas d'accord avec toi, tout dépend de la finalité de ton appli. Actuellement, je developpe un site astro pour un client, d'où la proposition de ce script, et je peux t'assurer que ça m'est tres utile.

sheorogath > Je pense que c'est faisable, c'est juste un problème de calendrier.

signaler à un administrateur
Commentaire de rrk275 le 16/12/2006 18:03:54

if($annee<1584)
return false;

et voila ^^

Louis

signaler à un administrateur
Commentaire de kankrelune le 18/12/2006 11:10:25

Euuuuh... .. .

function bissextile($annee)
{
    return ((is_int($annee/4) && !is_int($annee/100)) || is_int($annee/400));
}

C'est plus simple sans if()... non... .. ?

@ tchaOo°

signaler à un administrateur
Commentaire de rrk275 le 18/12/2006 11:40:24

Oula me suis relu .. et je revois mon code ..
if($annee<1584)
   return is_int($annee/4);

kankrelune, bonne réaction mais deja dit ^^

Louis

signaler à un administrateur
Commentaire de Kirua le 18/12/2006 12:10:19

pour tester si un nombre est divisible par un autre, vaut mieux calculer le reste de la division avec l'opérateur modulo:

if($n % $m == 0) { /* n est un multiple de m */ }

signaler à un administrateur
Commentaire de Skreo le 18/12/2006 23:22:06

Ouép, perso je fais comme ça :

function bissextile($annee){
  return ($annee%4==0 && $annee%100!=0) || $annee%400==0;
}

J'allais dire la même chose que kankrelune, c'est plus simple sans if ^^ Et le fait d'utiliser le % (pour calculer le reste) est plus propre

signaler à un administrateur
Commentaire de coucou747 le 19/12/2006 13:09:48

puisque vous débatez sur une poussière de propreté, alors un === vaut mieux qu'un == et un !== vaut mieux qu'un !=

signaler à un administrateur
Commentaire de Kirua le 19/12/2006 15:10:46

Ça c'est pour des comparaisons spéciales en PHP pour lever certaines ambiguïtés il me semble, ça ne s'applique pas ici, si? Le PHP, ça fait lgtps pour moi ...

signaler à un administrateur
Commentaire de kankrelune le 19/12/2006 15:16:40

Si ça peut très bien s'appliquer ici... d'une manière générale mieux vaut utiliser la comparaison typée comme le suggère coucou747 c'est plus rapide à l'éxécution... sauf dans certains cas ou une comparaison non typée s'impose... .. .

@ tchaOo°

signaler à un administrateur
Commentaire de malalam le 19/12/2006 15:18:19 administrateur CS

La comparaison typée est quand même plus rapide; et puis, on attend un 0 de type entier, pas un 0 de type booléen par exemple...c'est plus strict, et donc c'est une bonne habitude à prendre, Coucou a raison. Même si il y a peu de chance que l'opérateur modulo renvoie autre chose qu'un entier, on est d'accord.

signaler à un administrateur
Commentaire de malalam le 19/12/2006 15:19:13 administrateur CS

Grilled ;-)

signaler à un administrateur
Commentaire de coucou747 le 19/12/2006 18:36:56

:) Kirua, t'as encore de la marge sur moi en C et Cpp, mais depuis que tu m'as tourné vers le php, je penses que j'ai fais beaucoup de progrès :) Allez, je vais retourner m'entrainer pour prologin :)

signaler à un administrateur
Commentaire de sheorogath le 19/12/2006 19:06:01 administrateur CS

mdr t'en est ou des preselection ?
perso je les ai fini je vais bientot renvoyer le truc

signaler à un administrateur
Commentaire de rrk275 le 19/12/2006 22:22:24

D'ailleur ce code permettrait de passer une des épreuves ..


"je vais retourner m'entrainer pour prologin :) "
lol

euh, sheorogath, etait tu l'année derniere à prologin?

signaler à un administrateur
Commentaire de sheorogath le 19/12/2006 22:24:29 administrateur CS

non trop blaze je l'i decouvert que cette annee

ca a l'air trop enorme en plus !!!
j'espere arrive au moins jusqu'au demis ...

mais j'ai le dernier qui bouffe un peu de ram ...

signaler à un administrateur
Commentaire de rrk275 le 19/12/2006 22:31:25

Euh l'année derniere j'esperais au moins aller en demi  je suis allé en finale. Faut savoir que le niveau n'est pas hyper exigeant et si tu veux vraiment t'entrainer je te conseille le site France ioi.

Moi je passe tous les tests du dernier ( du 2eme coup je l'avoue .. )  ^^ et comme dit dans je sais plus où tu as toutes les chances d'être pris sans cela.

bonne chance ..

signaler à un administrateur
Commentaire de sheorogath le 19/12/2006 22:33:23 administrateur CS

france ioi ? je regarde
en attendant ta un lien stp ?

finale ? putain le reve pour moi meme si j'ai mon bac pas longtemps apres :s

signaler à un administrateur
Commentaire de sheorogath le 19/12/2006 22:33:54 administrateur CS

c'est bon je l'ai le site

signaler à un administrateur
Commentaire de sheorogath le 19/12/2006 22:39:18 administrateur CS

je connaissais pas ce site ...

j'irais faire quelques tour de temps en temps pour faire un pb par ci par la
en tout ils sont assez interressant

mais les enonces par toujours clair lol

signaler à un administrateur
Commentaire de coucou747 le 20/12/2006 12:49:39

rrk275, finale toi aussi, c'est quoi ton classement ? (par curiosité :) ) moi aussi, j'y étais, j'ai pas été super bien classé, mais bon, c'est déjà ça...

signaler à un administrateur
Commentaire de rrk275 le 20/12/2006 12:53:10

rrk275, finale toi aussi ( tu dois pas te souvenir mais on a joué ensemble à la finale ( warcraft? )  .. )
classement euh .. 63 ... ferais mieu l'année prochaine ^^

signaler à un administrateur
Commentaire de sheorogath le 20/12/2006 14:02:40 administrateur CS

lol vous etes sur d'etre pris a nouveau ? :p

signaler à un administrateur
Commentaire de rrk275 le 20/12/2006 14:17:52

Sur , nan .. mais j'ai tellement progressé depuis l'année derniere en algorithmique notamment sur france ioi que j'ai de grandes chances d'être repris ^^
Louis

signaler à un administrateur
Commentaire de sheorogath le 20/12/2006 14:23:16 administrateur CS

bon ben alors des que j'ai un peu de temps je vais voir ce site ,, france ioi il a l'air pas mal du tout

je pense quand meme etre pris en demis final

juste une question ta validé le dernier programme ?

signaler à un administrateur
Commentaire de rrk275 le 20/12/2006 14:27:07

J'ai validé tous les programmes ...

Louis

signaler à un administrateur
Commentaire de sheorogath le 20/12/2006 14:28:11 administrateur CS

putain me manque le dernier il prend trop de ram lol
tant pis

signaler à un administrateur
Commentaire de kankrelune le 20/12/2006 14:50:13

Bel exemple de off topic... vous pouvez pas en discuter sur le forum... ça évitera à tout le monde de recevoir des mails pour rien... et au serveur d'en envoyer par la même... merci... .. .

@ tchaOo°

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Tri de fichiers par date [ par Clem ] Comment trier dans l'orde du plus nouveau au plus vieux, des dossiers ?J'ai trouvé pour afficher les dossiers :&lt;?$rep=opendir('.');while ($file = r Comparer des dates [ par Blondy ] Je voudrais comparer des dates pour savoir quel fichier est le plus vieux... Mais lorsque je crée une date avec date("dmy"); par exemple, ça me crée q Comparaison de date [ par benett ] J'essaie de créer un site CDThèque et j'ai un gros problème : J'explique :Comment puis-je faire à partir de deux dates (La date de visite du site et l prob. pour des date ex. [ par LeRoux ] Je souhaite afficher les 5 articles les + récents d'une base de données se nommant articles, comment faire? Comparaison de date [ par benett ] Bonjour à tous,Comment peut-on comparer 2 dates et extraire la différences en jours.Ces 2 dates sont encodées via un formulaire au format aaaa/aa/aa.C formater une date [ par Stephane ] salutj'ai un gros pb que j'arrive pas a resoudre.j'ai une date dans une variable du type "2002/05/08", je voudrai arriver par quelque moyen que ce soi Convertir une Date au format Timestamp [ par Touf ] Salut !J'ai un petit pb : j'accède à une Date stockée dans une bdd mysql sous la forme (timestamp) "YmdHis" : 20020608105031J'aimerais l'afficher sous Date probleme [ par g0belin ] Ben voila en fait je veux faire un agenda...je veux afficher seulement les entree dans la base pour le jour courant...MAIS sa marche PASsa m'affiche t RE probleme DATE [ par g0belin ] Se que je veux faire c'est afficher les enregistrement qui ont la date du jours courant...Mais je n'y arrive pasPour cela j'ai un champs date(type:dat Date probleme [ par g0belin ] comment faire pour incrementer une date de x jours???je voulais faire dans le style mais sa marche pas!!!date("d-m-Y")+1;


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,38 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.