Holidays

Brazil Public Holidays Calculator

Brazil's nationwide public holidays for any year, calculated live from the actual rules.

Carnival: not officially national, but treated as one everywhere

Carnival Monday and Tuesday (the two days shown here, both tied to Easter) aren't actually decreed as official national public holidays under federal law — but in practice, businesses, schools, and government offices across nearly the entire country close anyway, making it a de facto nationwide holiday despite its unofficial status. Ash Wednesday that follows is typically a half-day.

"Ponte" days: unofficial but extremely common

When a fixed holiday falls close to a weekend (say, a Thursday), it's extremely common practice — though not law — for employers to also give the connecting Friday off as an informal "ponte" (bridge) day, similar in spirit to a US long weekend but driven by custom rather than any official rule.

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 brazilHolidays(year){ const easter = computeEaster(year); const carnivalMonday = new Date(easter); carnivalMonday.setUTCDate(easter.getUTCDate()-48); const carnivalTuesday = new Date(easter); carnivalTuesday.setUTCDate(easter.getUTCDate()-47); const goodFriday = new Date(easter); goodFriday.setUTCDate(easter.getUTCDate()-2); const corpusChristi = new Date(easter); corpusChristi.setUTCDate(easter.getUTCDate()+60); const raw = [ ['New Year\'s Day', new Date(Date.UTC(year,0,1))], ['Carnival Monday (unofficial)', carnivalMonday], ['Carnival Tuesday (unofficial)', carnivalTuesday], ['Good Friday', goodFriday], ['Tiradentes Day', new Date(Date.UTC(year,3,21))], ['Labour Day', new Date(Date.UTC(year,4,1))], ['Corpus Christi', corpusChristi], ['Independence Day', new Date(Date.UTC(year,8,7))], ['Our Lady of Aparecida', new Date(Date.UTC(year,9,12))], ['All Souls\' Day', new Date(Date.UTC(year,10,2))], ['Republic Proclamation Day', new Date(Date.UTC(year,10,15))], ['Christmas Day', new Date(Date.UTC(year,11,25))], ]; return raw.map(([name,date]) => ({name, 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 = brazilHolidays(year); table.innerHTML = rows.map(r => `
${r.name}${fmt(r.date)}
`).join(''); } yearSelect.addEventListener('change', render); render();