Para ello hay que saber:
1) dado cierto mes, ¿cuantos domingos tiene?
2) dado cierto mes, ¿cuantos lunes tiene?
Una vez sabemos esto solo hay que restar estos a los días del mes.
El problema 1) y 2) se puede abstraer al siguiente problema más genérico:
dado cierto mes y cierto dia X de la semana, ¿cuantos dias X hay? Donde X se refiere a un número entre 0 y 6 correspondiente a los días de domingo a lunes siguiendo el patrón de la función
getDay
Para ello es necesario saber en qué día del mes cae el primer día X de la semana. Eso parece fácil. Una vez sabido ese día del mes que llamaré
n enseguida caemos en que tenemos justamente Math.ceil((cantidadDiasMes - n + 1)/7).
En fin, que cuesta menos escribir el código que explicarlo:
Código Javascript
:
Ver originalfunction firstDayInMonth(dayOfWeek, month, year) {
firstDayOfMonth = new Date(year, month, 1);
return (dayOfWeek - firstDayOfMonth.getDay() + 7) % 7 + 1;
}
function daysOfMonth (month, year) {
return new Date(year, month + 1, 0).getDate();
}
function daysOfWeekInMonth(dayOfWeek, month, year) {
return Math.ceil((daysOfMonth(month, year) - firstDayInMonth(dayOfWeek, month, year) + 1) / 7);
}
function daysOfMonthWithout(month, year, discarding) {
return discarding.reduce(function (days, dayOfWeek) {
return days - daysOfWeekInMonth(dayOfWeek, month, year)
}, daysOfMonth(month, year));
}
// descartamos domingos y lunes (0 y 1) un junio de 2016
daysOfMonthWithout(5, 2016, [0, 1]) // 22
Un saludo!