OBTENIR LE NOMBRE DE JOURS D'UN MOIS SUIVANT SON ANNÉE
007Julien
Messages postés276Date d'inscriptionmercredi 22 septembre 2010StatutMembreDerniè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.
DomBau22
Messages postés1Date d'inscriptionsamedi 17 mars 2012StatutMembreDernière intervention17 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és276Date d'inscriptionmercredi 22 septembre 2010StatutMembreDernière intervention 8 janvier 20144 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és2Date d'inscriptiondimanche 30 janvier 2011StatutMembreDernière intervention31 janvier 2011 31 janv. 2011 à 19:40
Merci, et ce ne sera pas le dernier exo...
007Julien
Messages postés276Date d'inscriptionmercredi 22 septembre 2010StatutMembreDernière intervention 8 janvier 20144 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és2Date d'inscriptiondimanche 30 janvier 2011StatutMembreDernière intervention31 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és276Date d'inscriptionmercredi 22 septembre 2010StatutMembreDernière intervention 8 janvier 20144 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és276Date d'inscriptionmercredi 22 septembre 2010StatutMembreDernière intervention 8 janvier 20144 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);
10 avril 2018 à 09:25
17 mars 2012 à 14:50
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
5 févr. 2011 à 12:05
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();
31 janv. 2011 à 19:40
31 janv. 2011 à 19:16
31 janv. 2011 à 18:58
31 janv. 2011 à 08:19
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));
30 janv. 2011 à 23:27
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);