Obtenir le nombre de jours d'un mois suivant son année

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 705 fois - Téléchargée 15 fois

Contenu du snippet

Ce script permet à travers une fonction prenant comme argument le numéro du mois dont on veut savoir le nombre de jours et l'année désirée. Le mois doit être passé au format chiffre (0: janvier, 1: février, 2:mars, ...) et l'année au format 4 chiffres classique( 2011, 2012 ,...). Le script prend en compte les années bissextiles.

Source / Exemple :


function NonbreJourMois(mois, annee)
{
	var nbreJour = 0;
	
	if (mois <= 6)
	{
		if (mois%2 == 0)
		{
			nbreJour = 31;
		}
		else
		{
			nbreJour = 30;
		}
	}
	
	else
	{
		if (mois%2 == 1)
		{
			nbreJour = 30;
		}
		else
		{
			nbreJour = 31;
		}
	}
	if (mois == 1)
	{
		if(annee%4==0)
{
 	if(annee%100==0)
  	{
    	if(annee%400==0)
     	{
     		nbreJour = 29;
     	}
     	else
     	{
      		nbreJour = 28;
     	}

  	}
    else
    {
   		nbreJour = 29;
  	}
}
else
{
 	nbreJour = 28;
}

	}
	
	return nbreJour;
	
}

Conclusion :


Un script efficace et qui peut toujours servir...

A voir également

Ajouter un commentaire

Commentaires

007Julien
Messages postés
279
Date d'inscription
mercredi 22 septembre 2010
Statut
Membre
Dernière intervention
8 janvier 2014
2 -
Une variante pour le corps de la fonction :
return Math.round((new Date(annee,mois-(-1),1,0,0)-new Date(annee,mois,1,0,0))/86400000);

Avec un -(-1)pour être certain d'ajouter 1 et un Math.round pour éviter quelques bugs (FireFox affiche notamment 30.95833 pour mars 1900);
007Julien
Messages postés
279
Date d'inscription
mercredi 22 septembre 2010
Statut
Membre
Dernière intervention
8 janvier 2014
2 -
Autres variantes toujours pour le corps de la fonction

1/- Pour éviter une affreuse division :
var j=28;
while ((new Date(annee,mois,j-(-1))).getMonth()==mois) j++;
return j;

2/- Pour revenir à l’esprit de la proposition initiale :
return mois-1?(30+(mois+(mois<7?1:0))%2):(28+((annee%4==0 && (annee%100!=0 || annee%400==0))?1:0))

3/- Mais est-il vraiment nécessaire d’appeler une fonction pour faire cette soustraction ?

return 32 - new Date(annee,mois,32).getDate();



En revenant à l’esprit de la proposition initiale :
return m-1?(30+(m+(m<7?1:0))%2):(28+((a%4==0 && (a%100!=0 || a%400==0))?1:0));
cs_hugolegrand
Messages postés
2
Date d'inscription
dimanche 30 janvier 2011
Statut
Membre
Dernière intervention
31 janvier 2011
-
Désolais Julien tu as raison mais j'avoue que mon petit niveau de javascript n'as pas vu tout cela.
007Julien
Messages postés
279
Date d'inscription
mercredi 22 septembre 2010
Statut
Membre
Dernière intervention
8 janvier 2014
2 -
Non, il n'y a pas de raison d'être désolé ! Tu as fait un très bon exercice de programmation sans faute après avoir vu toutes les exceptions. Retenons simplement qu'il y a souvent plusieurs solutions pour résoudre une question...
cs_hugolegrand
Messages postés
2
Date d'inscription
dimanche 30 janvier 2011
Statut
Membre
Dernière intervention
31 janvier 2011
-
Merci, et ce ne sera pas le dernier exo...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.