[Javascript] Connaitre le nombre de jours d’un mois

Quand on a l’habitude de coder en PHP et que l’on doit se mettre au javascript pour enrichir les interfaces on est vite limité par certaines fonctions pourtant si évidentes en PHP. Dernier exemple pour moi : récupérer le nombre de jours d’un mois donné de façon simple, sans calcul… En un mot un équivalent à la fonction suivante :

date(‘t’, $date);

J’ai eu beau chercher sur le net je n’ai pas réussi à mettre la main sur une fonction équivalente – l’objet Date de javascript ne prenant pas en charge cette fonctionnalité pourtant très utile. Et comme souvent dans ce cas je me suis mis à bidouiller jusqu’à trouver la solution. Celle-ci est tellement simple et efficace que j’ai décidé de vous la faire partager :

function getNbJours(date){
return new Date(date.getFullYear(), date.getMonth()+1, -1).getDate()+1;
}

Il s’agit donc de créer une nouvelle date temporaire dont l’année soit la même, le mois m+1 (n’oubliez pas que les mois sont les mois ordonnés dans l’ordre de 0 à 11) et le jour à -1. On récupère ensuite le jour de cette date auquel on ajoute 1 (oui je ne sais pas pourquoi il faut ajouter 1, mais de tous mes essais ça fonctionne sans soucis).

Petite note de service : je suis sur une mission qui me prend un peu plus de temps que la normale et je ne pourrais donc pas mettre à jour mon blog aussi souvent que d’habitude. Par ailleurs je ne peux pas tweeter, mais je vous laisse le soin de me suivre quand même : @Paul_Da_Silva – retour à une activité normale programmé le 31 mai… D’ici là comptez sur moi pour faire de mon mieux pour continuer à vous fournir un maximum de contenu intéressant 😉

6 réflexions sur « [Javascript] Connaitre le nombre de jours d’un mois »

  1. Bellerophon

    On peut peut-être essayer de mettre 0 à la place de -1 pour éviter de rajouter +1 ensuite (je n’ai pas testé).

    Sinon j’ai créé cette fonction pour mes besoins persos:

    function getNbJoursMois(mois, annee) {
    var lgMois = new Array[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    if ((annee%4 == 0 && annee%100 != 0) || annee%400 == 0) lgMois[1] += 1;
    return lgMois[mois]; // 0 < mois <11
    }

    Avec calcul de l'année bissextile.

  2. Gaten

    La solution proposé dans cet article tient compte des années bissextiles puisqu’elle se base du la gestion du calendrier du navigateur du client.

  3. Le Lezard

    Pour faire + simple (testé !):
    function getNbJours(date){
    return new Date(date.getFullYear(), date.getMonth()+1, 0).getDate();
    }

  4. Pirato

    Bravo à Bellerophon !
    Il faut toujours prévoir les années bissextiles 😉

    J’ai corrigé son script (histoire qu’un copier/coller marche …)

    function getNbJoursMois(mois, annee) {
    var lgMois = [’31’, ’28’, ’31’, ’30’, ’31’, ’30’, ’31’, ’31’, ’30’, ’31’, ’30’, ’31’];
    if ((annee%4 == 0 && annee%100 != 0) || annee%400 == 0) {
    lgMois[1] = ’29’;
    }
    return lgMois[mois]; // 0 < mois <11
    }

Les commentaires sont fermés.