Пять уикендов в месяце
Имеется в виду, что в нём должно быть по пять пятниц, суббот и воскресений. Такое возможно, если в месяце 31 день и он начинается с пятницы.
Часто ли такое бывает? Да, довольно часто.
Ниже показан в работе маленький скрипт, решающий задачу о need
ближайших месяцах с пятью уикендами,
значение need
передаётся аргументом функции, в исходнике оно равно 10
, исходник приведён без HTML-обрамления.
Имейте в виду также вот эту заметку, календарь, и не верьте популярным нынче в сети "календарным" разводам :)
Выше (при включённом в браузере Javascript) выведется результат работы скрипта, а ниже - листинг на момент написания.
<p id="nextFiveWeekendsItem"></p> <script> function getNextMonth (need) { var Months = [ 'Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь' ]; var leap = 0, offset = [3,0,3,2,3,2,3,3,2,3,2,3], // Относительные смещения между первыми днями месяцев longMonths = [1,3,5,7,8,10,12], //Месяцы по 31 дню dt = new Date(), startYear = dt.getFullYear(), startMonth = dt.getMonth(), dt1 = new Date(startYear,startMonth,1), year = startYear, day = dt1.getDay(), total = 0, result = []; for (; total < need; year++) { leap = totalPerYear = 0; if (year % 4 === 0) { if (year % 100 === 0) { if (year % 400 === 0) leap = 1; } else leap = 1; } for (var i = startMonth; i < offset.length; i++) { for (var j = 0; day === 5 && j < longMonths.length; j++) { if (i + 1 === longMonths[j]) { total++; result.push (Months[i] + ' ' + year); if (result.length === need) return result; } } if (i == 1) day = (day + leap) % 7; else day = (day + offset[i]) % 7; } startMonth = 0; } return result; } window.addEventListener('load', function (e) { //По загрузке выполнить это var r = getNextMonth(10); document.getElementById('nextFiveWeekendsItem').innerHTML = ''; for (var i = 0 ; i < r.length; i++) document.getElementById('nextFiveWeekendsItem').innerHTML += r[i] + (i < r.length-1 ? ', ' : ''); }, false); </script> <noscript><p>Включите Javascript для работы приложения!</p></noscript>
01.06.2019, 14:17 [1462 просмотра]