2011-10-19 7 views
-2

Comment puis-je créer une fonction pour trouver le nombre de jours ouvrables du mois en cours? Pouvez-vous coder en javascript simple sans Jquery.Comment trouver des jours ouvrables dans le mois en cours avec Javascript?

function daysInMonth(iMonth, iYear) 
    { 
    return 32 - new Date(iYear, iMonth, 32).getDate(); 
    } 

    function Detail() { 
    var d = new Date(); 
    var year = d.getFullYear(); 
    var month = d.getMonth(); 
    var dim = daysInMonth(month, year); 
    alert(dim); 
    } 
    function Businessday(iMonth, iYear) 
    { 
    // enter code here 
    } 
    function isBusinessDay(){ 
    var d=new Date(); 
    var day = d.getDay(); 
    switch(day) { 
     case 0: 
      document.write("Today is Weekend"); 
     break; 
     case 6: 
     document.write("Today is Weekend"); 
      break; 
      default: 
      document.write("Today is business day"); 
     } 
      } 

Merci d'avance.

+2

Pouvez-vous préciser quelle différence, le cas échéant, il y a entre un jour ouvrable et un jour de la semaine (du lundi au vendredi)? –

+0

Du lundi au vendredi est le jour ouvrable. –

Répondre

12

OK, résolvons cette une pièce à la fois. L'objet Date en JavaScript a une méthode getDay. Cela retournera 0 pour dimanche, 1 pour lundi, 2 pour mardi, ... 6 pour samedi. Compte tenu de cela, nous pouvons conclure que nous voulons ne pas compter les jours getDay renvoie 0 ou 6.

Vous avez déjà une fonction pour retourner le nombre de jours dans un mois, donc en supposant que, nous pouvons faire une boucle sur tous les jours et vérifier le résultat de getDay. daysInMonth fait l'hypothèse que le mois est basé sur zéro; donc 0 = janvier.

Je vous encourage à essayer de résoudre ce problème par vous-même; sinon lisez la suite. Nous commençons par une fonction isWeekday. Nous avons besoin de l'année, le mois et le jour:

function isWeekday(year, month, day) { 
var day = new Date(year, month, day).getDay(); 
return day !=0 && day !=6; 
} 

Nous faisons exactement comme nous avons parlé ci-dessus: on construit une date, et d'utiliser getDay pour déterminer si elle est un jour.

Maintenant, nous avons besoin de faire une boucle sur tous les jours du mois:

function getWeekdaysInMonth(month, year) { 
var days = daysInMonth(month, year); 
var weekdays = 0; 
for(var i=0; i< days; i++) { 
    if (isWeekday(year, month, i+1)) weekdays++; 
} 
return weekdays; 
} 

Nous boucle sur tous les jours du mois. Nous ajoutons 1 en vérifiant isWeekday car le jour, contrairement au mois, est basé sur 1. Si c'est le cas, nous incrémentons weekdays, puis revenons.

On peut donc utiliser getWeekdaysInMonth comme ceci:

var weekdays = getWeekdayInMonth(9, 2011); //9 = October. 

Ce qui se traduira par 21

+0

Super, ça marche, bonne explication dans les détails. –

0

style fonction FLÈCHE enchaînant:

(
    (year, month) => 
     new Array(32 - new Date(year, month, 32).getDate()) 
     .fill(1) 
     .filter(
      (id, index) => 
       [0, 6].indexOf(
        new Date(year, month, index + 1).getDay()) === -1 
       ).length 
)(2017, 5) 
Questions connexes