Псевдокод подходит к вам:
Рассчитать количество дней между настоящим и последним днем месяца.
Получить текущий день недели (т.е. среда)
Основываясь на текущем дне недели и количестве дней, оставшихся в месяце, можно легко рассчитать, сколько дней выходных осталось в месяце - это будет количество дней, оставшихся в месяце, за вычетом количество воскресений / суббот, оставшихся в месяце.
Я бы написал функцию, что-то вроде:
daysLeftInMonth(daysLeftInMonth, startingDayOfWeek, dayOfWeekToCalculate)
где:
- daysLeftInMonth - последний день месяца (30), минус текущая дата (15)
- startDayOfWeek - это день недели, с которого вы хотите начать (на сегодня это будет среда)
- dayOfWeekToCalculate - это день недели, который вы хотите посчитать, например, Суббота или воскресенье. В июне 2011 года 2 воскресенья и 2 субботы до конца месяца
Итак, ваш алгоритм становится примерно таким:
getWeekdaysLeft(todaysDate)
... getWeekdaysLeft - это что-то вроде:
sundaysLeft = daysLeftInMonth(lastDayOfMonth - todaysDate, "Wednesday", "Sunday");
saturdaysLeft = daysLeftInMonth(lastDayOfMonth - todaysDate, "Wednesday", "Saturday");
return ((lastDayOfMonth - todaysDate) - (sundaysLeft + saturdaysLeft));