Countdown

Black Friday & Cyber Monday Countdown

A live countdown to both dates, calculated from the rule that actually defines them — not looked up from a fixed list.

How these dates are actually defined

Black Friday is always the day immediately following US Thanksgiving — the 4th Thursday of November, per the US federal holiday calendar — which makes it always a Friday, but the calendar date itself moves within a roughly week-wide range each year. Cyber Monday is simply the following Monday, a newer, purely retail-invented date (coined in 2005) with no historical or governmental basis at all — it exists purely because it was the next convenient shopping-focused day after a long weekend.

Neither is an official public holiday

Unlike Thanksgiving itself, neither Black Friday nor Cyber Monday is a federal holiday — many people are simply off work because Thanksgiving Thursday often gets paired with the Friday as a company-granted long weekend, not because Friday itself is any kind of statutory holiday.

Related

Related tools

function nthWeekday(year, month, weekday, n){ 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)); } const now = new Date(); let year = now.getUTCFullYear(); let thanksgiving = nthWeekday(year,10,4,4); let blackFriday = new Date(thanksgiving); blackFriday.setUTCDate(thanksgiving.getUTCDate()+1); let cyberMonday = new Date(thanksgiving); cyberMonday.setUTCDate(thanksgiving.getUTCDate()+4); if(cyberMonday.getTime() < now.getTime()){ year += 1; thanksgiving = nthWeekday(year,10,4,4); blackFriday = new Date(thanksgiving); blackFriday.setUTCDate(thanksgiving.getUTCDate()+1); cyberMonday = new Date(thanksgiving); cyberMonday.setUTCDate(thanksgiving.getUTCDate()+4); } function fmt(d){ return d.toLocaleDateString('en-US',{weekday:'long', month:'long', day:'numeric', year:'numeric', timeZone:'UTC'}); } document.getElementById('bfDate').textContent = fmt(blackFriday); document.getElementById('cmDate').textContent = fmt(cyberMonday); const bfDays = Math.ceil((blackFriday - now)/86400000); const cmDays = Math.ceil((cyberMonday - now)/86400000); document.getElementById('bfCountdown').textContent = bfDays <= 0 ? "It's today!" : `${bfDays} days away`; document.getElementById('cmCountdown').textContent = cmDays <= 0 ? "It's today!" : `${cmDays} days away`;