J'utilise cette fonction mais j'aimerais savoir quel est le moyen le plus efficace et le plus précis pour l'obtenir.
function daysInMonth(iMonth, iYear) {
return 32 - new Date(iYear, iMonth, 32).getDate();
}
javascript
date
Chatu
la source
la source
return new Date(year, month + 1, 0).getDate();
var d=new Date();d.setFullYear(year, month, date);
.month
est 12 ? LeDate
constructeur ne devrait-il pas prendre une valeur de 0 à 11 ?Si vous appelez souvent cette fonction, il peut être utile de mettre en cache la valeur pour de meilleures performances.
Voici la version de mise en cache de la réponse de FlySwat :
la source
Date
(il n'y a donc pas de réponse universelle à cette question) et de la fréquence à laquelle votre code appellera ledayInMonth
avec les mêmes valeurs. La seule réponse raisonnable est donc: profilez votre code et comparez-le!cache
j'utiliselocalStorage
.Certaines réponses (également sur d'autres questions) avaient des problèmes d'année bissextile ou utilisaient l'objet Date. Bien que le javascript
Date object
couvre environ 285616 ans (100 000 000 jours) de chaque côté du 1er janvier 1970, j'en avais marre de toutes sortes d' incohérences de date inattendues entre différents navigateurs (notamment les années 0 à 99). J'étais également curieux de savoir comment le calculer.J'ai donc écrit un algorithme simple et surtout petit pour calculer le nombre correct ( Proleptic Gregorian / Astronomical / ISO 8601: 2004 (clause 4.3.2.1), donc l' année
0
existe et est une année bissextile et les années négatives sont prises en charge ) le nombre de jours pour un mois et une année donnés.Il utilise l' algorithme de court-circuit bitmask-modulo leapYear (légèrement modifié pour js) et l'algorithme commun mod-8 month.
Notez qu'en
AD/BC
notation, l'année 0 AD / BC n'existe pas: à la place, l'année1 BC
est l'année bissextile!SI vous devez tenir compte de la notation BC, soustrayez simplement une année de la valeur de l'année (sinon positive) en premier !! (Ou soustrayez l'année de
1
pour d'autres calculs d'année.)Notez que les mois doivent être basés sur 1!
Notez qu'il s'agit d'un algorithme différent de la recherche de nombres magiques que j'ai utilisée dans mon Javascript pour calculer le jour de l'année (1 - 366) , car ici, la branche supplémentaire pour l'année bissextile n'est nécessaire que pour février.
la source
Pour éviter toute confusion, je créerais probablement la chaîne du mois en fonction de sa base actuelle.
la source
Avec moment.js, vous pouvez utiliser la méthode daysInMonth ():
la source
C'est parti
la source
Syntaxe ES6
Retour
la source
la source
Compte tenu des années bissextiles:
la source
Calcul direct à une ligne (pas d'objet Date):
Variation avec les mois basés sur 0:
la source
Si vous voulez le nombre de jours dans le mois en cours d'un objet Date, envisagez la méthode suivante:
Ensuite, vous pouvez l'exécuter comme ceci:
la source
En une seule ligne:
la source
Peut-être un peu trop tuer par rapport à la réponse sélectionnée :) Mais la voici:
J'ai trouvé le code ci-dessus ici: https://github.com/ElemeFE/element/blob/dev/src/utils/date-util.js
J'ai trouvé le code ci-dessus ici: https://github.com/datejs/Datejs/blob/master/src/core.js
la source
Si vous allez passer une variable de date, cela peut être utile
la source
Peut-être pas la solution la plus élégante, mais facile à comprendre et à maintenir; et, il est testé au combat.
la source