Holidays

US Federal Holidays Calculator

All 11 US federal holidays for any year, calculated live from the actual rules — not copied from a static list — including which date federal offices actually observe when a holiday falls on a weekend.

The observed-date rule

When a federal holiday falls on a Saturday, it's officially observed the preceding Friday; when it falls on a Sunday, it's observed the following Monday. This affects when federal offices, courts, and banks are actually closed, even though the legal holiday date itself doesn't move — this calculator shows both.

Not every US holiday is on this list

This covers the 11 holidays established in federal law for federal employees and the federal calendar. Many states and private employers observe additional holidays, and not every federal holiday is a mandatory closure for private businesses — check with a specific employer or state government for their own calendar.

Related

Related tools

function computeEaster(year){ const a = year % 19; const b = Math.floor(year/100); const c = year % 100; const d = Math.floor(b/4); const e = b % 4; const f = Math.floor((b+8)/25); const g = Math.floor((b-f+1)/3); const h = (19*a + b - d - g + 15) % 30; const i = Math.floor(c/4); const k = c % 4; const l = (32 + 2*e + 2*i - h - k) % 7; const m = Math.floor((a + 11*h + 22*l)/451); const month = Math.floor((h + l - 7*m + 114)/31); const day = ((h + l - 7*m + 114) % 31) + 1; return new Date(Date.UTC(year, month-1, day)); } function nthWeekday(year, month, weekday, n){ // month 0-indexed, weekday 0=Sun if(n === -1){ const last = new Date(Date.UTC(year, month+1, 0)); let d = last.getUTCDate(); while(new Date(Date.UTC(year, month, d)).getUTCDay() !== weekday) d--; return new Date(Date.UTC(year, month, d)); } const first = new Date(Date.UTC(year, month, 1)); const offset = (weekday - first.getUTCDay() + 7) % 7; return new Date(Date.UTC(year, month, 1 + offset + (n-1)*7)); } function usObserved(date){ // if Sat, observe Fri; if Sun, observe Mon const day = date.getUTCDay(); if(day === 6) { const d = new Date(date); d.setUTCDate(d.getUTCDate()-1); return d; } if(day === 0) { const d = new Date(date); d.setUTCDate(d.getUTCDate()+1); return d; } return date; } function usHolidays(year){ const raw = [ ['New Year\'s Day', new Date(Date.UTC(year,0,1))], ['Martin Luther King Jr. Day', nthWeekday(year,0,1,3)], ['Washington\'s Birthday (Presidents Day)', nthWeekday(year,1,1,3)], ['Memorial Day', nthWeekday(year,4,1,-1)], ['Juneteenth', new Date(Date.UTC(year,5,19))], ['Independence Day', new Date(Date.UTC(year,6,4))], ['Labor Day', nthWeekday(year,8,1,1)], ['Columbus Day', nthWeekday(year,9,1,2)], ['Veterans Day', new Date(Date.UTC(year,10,11))], ['Thanksgiving Day', nthWeekday(year,10,4,4)], ['Christmas Day', new Date(Date.UTC(year,11,25))], ]; return raw.map(([name,date]) => ({name, date, observed: usObserved(date)})); } const now = new Date(); for(let y = now.getFullYear()-1; y <= now.getFullYear()+3; y++){ const opt = document.createElement('option'); opt.value = y; opt.textContent = y; if(y === now.getFullYear()) opt.selected = true; document.getElementById('hlYear').appendChild(opt); } const yearSelect = document.getElementById('hlYear'); const table = document.getElementById('hlTable'); function fmt(d){ return d.toLocaleDateString('en-US',{weekday:'short', month:'long', day:'numeric'}); } function render(){ const year = parseInt(yearSelect.value,10); const rows = usHolidays(year); table.innerHTML = rows.map(r => { let obsHtml = ''; if(r.observed && r.observed.getTime() !== r.date.getTime()){ obsHtml = ` (observed ${fmt(r.observed)})`; } return `
${r.name}${fmt(r.date)}${obsHtml}
`; }).join(''); } yearSelect.addEventListener('change', render); render();