OBTENIR LE NOMBRE DE JOURS D'UN MOIS SUIVANT SON ANNÉE

007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 - 30 janv. 2011 à 23:27
 thim - 10 avril 2018 à 09:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/52768-obtenir-le-nombre-de-jours-d-un-mois-suivant-son-annee

Merci
DomBau22 Messages postés 1 Date d'inscription samedi 17 mars 2012 Statut Membre Dernière intervention 17 mars 2012
17 mars 2012 à 14:50
Je ne vois pas l'intérêt de ce script si ce n'est programmer pour programmer.
Quelque que soit l'année
janvier 31
mars 31
avril 30
mai 31
juin 30
juillet 31
août 31
septembre 30
octobre 31
novembre 30
décembre 31
Le seul mois qui pose problème est février 28 ou 29
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
5 févr. 2011 à 12:05
Encore plus court ! Qui dit mieux ?
Le nombre de jour d'un mois, c'est le quantième de son dernier jour. Le dernier jour, cela coule de source, c'est celui qui précède le premier jour du mois suivant... Alors inutile de faire une soustraction ou de rechercher d'autres complications :
nbrJrs = new Date(annee,mois+1,0).getDate();
cs_hugolegrand Messages postés 2 Date d'inscription dimanche 30 janvier 2011 Statut Membre Dernière intervention 31 janvier 2011
31 janv. 2011 à 19:40
Merci, et ce ne sera pas le dernier exo...
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
31 janv. 2011 à 19:16
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
31 janv. 2011 à 18:58
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 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
31 janv. 2011 à 08:19
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));
007Julien Messages postés 276 Date d'inscription mercredi 22 septembre 2010 Statut Membre Dernière intervention 8 janvier 2014 4
30 janv. 2011 à 23:27
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);
Rejoignez-nous