Пятница 13 довольно необычная дата. Считается что в этот день выходит из под контроля нечистная сила и могут происходить всякого рода необычные события. А как часто бывает этот день? Наверняка вы переодически замечаете в календаре - вот она родимая. Но навряд ли считали сколько раз в году бывает пятница 13. Обязательно ли она должна произойти или может быть год когда ее нет? Сколько максимально раз в году может сучиться это событие?
Не будем углубляться в математику, а просто напишем пару небольших програм которые посчитают все за нас. Внизу статьи вас ждет бонус - подсчет количеств выпадения пятниц 13-го на любой год.
И так поехали. Посчитаем максимально и минимально возможное количество пятниц 13-го в году начиная с Рождества Христова и до 3000 года:
var D = new Date(), counter, max, min;
for(var year=0; year<=3000; year++){
//Ставим начало года
D.setFullYear(year, 0, 1);
counter = 0;
for(var i=1, d; i<=365; i++){
//прибавляем по одному дню пока не достигнем конца года
d = new Date(D.getTime());
d.setDate(i);
if(d.getDay()==5 && d.getDate()==13){
//Случилась пятница 13-е ура!
counter++;
}
}
if(!max || counter>max){
max = counter;
}
if(!min || counter<min){
min = counter;
}
}
console.log(max, min); //Выводит max=3 и min=1
Что это значит? Значит минимум один раз в год вас ждет пятница 13-е - она случается каждый год и от ее никуда не избавишься. Максимально эта дата может случиться 3 раза, но не более! Согласитесь довольно редкое событие - почти как Новый год. Так что есть повод его отметить!
function countFridays(){
var options = {weekday: 'long', year: 'numeric', month: 'long', day: 'numeric'},
dateTimeFormat = new Intl.DateTimeFormat('ru-RU', options);
var D = new Date(), str = '', m;
if(m = document.getElementById("counts-input").value.match(/([0-9]+)/)){
year = m[1];
}
else{
document.getElementById("counts-input").value = year = D.getFullYear();
}
D.setFullYear(year, 0, 1);
for(var i=1, d; i<=365; i++){
d = new Date(D.getTime());
d.setDate(i);
if(d.getDay()==5 && d.getDate()==13){
str += '<li>'+dateTimeFormat.format(d) + '</li>';
}
}
document.getElementById("counts-result").innerHTML = str;
}
document.getElementById("counts-input").addEventListener("input", countFridays);
countFridays();