const skippedMonths = [ { m: 8, y: 2022 }, { m: 12, y: 2022 }, ]; const i18n = { en: { comingDates: 'The following dates are scheduled:', friday: 'friday', sunday: 'sunday', until: 'until', months: [ 'Jan.', 'Feb.', 'Mar.', 'Apr.', 'May', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Oct.', 'Nov.', 'Dec.', ], }, de: { comingDates: 'Folgende Termine stehen an:', friday: 'Freitag', sunday: 'Sonntag', until: 'bis', months: [ 'Jan.', 'Feb.', 'Mär.', 'Apr.', 'Mai', 'Jun.', 'Jul.', 'Aug.', 'Sep.', 'Okt.', 'Nov.', 'Dez.', ], }, }; const datesLists = { en: document.getElementById('dates-list-en'), de: document.getElementById('dates-list-de'), }; const day = 24 * 60 * 60 * 1000; const week = 7 * day; const endOfWeekend = 2 * day; const start = new Date(); const hakkens = []; // We'll be looking about half a year into the future for (let i = 0; i < 185; i++) { const dateToTry = new Date(start.valueOf() + (i * day)); if (dateToTry.getDay() !== 5) { continue; } const oneWeekLater = new Date(dateToTry.valueOf() + week); if (dateToTry.getMonth() === oneWeekLater.getMonth()) { continue; } const m = dateToTry.getMonth() + 1; const y = dateToTry.getFullYear(); if (skippedMonths.find((s) => s.m === m && s.y === y)) { continue; } hakkens.push(dateToTry); } // Helper function to add leading zeros to dates const d = (num) => ('0' + num).slice(-2); const writeText = (lang) => { const p = document.createElement('p'); p.innerHTML = i18n[lang].comingDates; datesLists[lang].appendChild(p); } const writeDateList = (lang) => { const ul = document.createElement('ul'); hakkens.forEach(hakken => { hakkend = new Date(hakken.valueOf() + endOfWeekend); const showFirstMonth = hakken.getMonth() !== hakkend.getMonth(); const li = document.createElement('li'); li.innerHTML = ` ${i18n[lang].friday} ${d(hakken.getDate())}. ${showFirstMonth ? i18n[lang].months[hakken.getMonth()] : ''} ${i18n[lang].until} ${d(hakkend.getDate())}. ${i18n[lang].months[hakkend.getMonth()]} `; ul.appendChild(li); }); datesLists[lang].appendChild(ul); } writeText('de'); writeText('en'); writeDateList('de'); writeDateList('en');