December 2025 Calendar — Printable & Downloadable


Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
Month Year
Thu Feb 19 2026
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
';const iframe = document.createElement('iframe'); iframe.style.position = 'fixed'; iframe.style.right = '0'; iframe.style.bottom = '0'; iframe.style.width = '0'; iframe.style.height = '0'; iframe.style.border = '0'; iframe.style.visibility = 'hidden'; document.body.appendChild(iframe);iframe.contentDocument.open(); iframe.contentDocument.write(html); iframe.contentDocument.close();let printed = false; let cleanupTimer = null; let fallbackTimer = null;function cleanup() { if (cleanupTimer) { clearTimeout(cleanupTimer); cleanupTimer = null; } if (fallbackTimer) { clearTimeout(fallbackTimer); fallbackTimer = null; } try { if (iframe && iframe.parentNode) iframe.parentNode.removeChild(iframe); } catch(e) { /* ignore */ } }function onAfterPrint() { printed = true; cleanupTimer = setTimeout(cleanup, 300); try { if (iframe && iframe.contentWindow) { iframe.contentWindow.removeEventListener('afterprint', onAfterPrint); } } catch(e){} }function onFocusOrVis() { if (!printed) { cleanupTimer = setTimeout(cleanup, 300); } try { window.removeEventListener('focus', onFocusOrVis); document.removeEventListener('visibilitychange', onFocusOrVis); } catch(e){} }try { if (iframe.contentWindow) { iframe.contentWindow.addEventListener('afterprint', onAfterPrint); } } catch(e){}window.addEventListener('focus', onFocusOrVis); document.addEventListener('visibilitychange', onFocusOrVis);fallbackTimer = setTimeout(function(){ try { if (!printed && iframe.contentWindow) { printed = false; iframe.contentWindow.focus(); iframe.contentWindow.print(); } } catch (e) { try { window.print(); } catch(err) {} cleanup(); } }, 200);setTimeout(function(){ cleanup(); }, 20000);} catch(err){ console.error('Print (iframe) error', err); try { window.print(); } catch(e){} } }if(printBtn) printBtn.addEventListener('click', doPrintViaIframe);function updateMonthSelector(){ if(!monthSelector) return; const nodes = Array.from(monthSelector.querySelectorAll('div[data-month]')); nodes.forEach(node => { node.classList.remove('active'); const m = parseInt(node.dataset.month,10); if(m === current.getMonth()) node.classList.add('active'); }); }function updateMonthInfo(){ if(!monthInfo) return; const y = current.getFullYear(); const m = current.getMonth(); const firstDay = new Date(y, m, 1).getDay(); const daysInMonth = new Date(y, m+1, 0).getDate(); const weeks = Math.ceil((firstDay + daysInMonth) / 7); const isLeap = ( (y % 4 === 0 && y % 100 !== 0) || (y % 400 === 0) ); const counts = [0,0,0,0,0,0,0]; for(let d=1; d<=daysInMonth; d++){ const w = new Date(y, m, d).getDay(); counts[w] += 1; } const dayNames = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']; const countsStr = counts.map((c,i) => dayNames[i] + ':' + c).join(' · '); const startName = new Date(y, m, 1).toLocaleString(undefined, { weekday: 'long' });monthInfo.textContent = ''; const main = document.createElement('div'); main.textContent = 'Days: ' + daysInMonth + ' · Starts: ' + startName + ' · Weeks: ' + weeks + ' · Leap Year: ' + (isLeap ? 'Yes' : 'No'); main.style.fontWeight = '600'; monthInfo.appendChild(main);const breakdown = document.createElement('div'); breakdown.style.marginTop = '4px'; breakdown.textContent = countsStr; monthInfo.appendChild(breakdown); }// initial render renderMonth();})();

Important dates in December 2025

  • December 1, 2025 (Monday) — First day of month
  • December 31, 2025 (Wednesday) — Last day of month

How to use

  1. Click Print Calendar to save as PDF or print.
  2. Use Prev/Next in the widget to switch months.

FAQ

Can I download this as a PDF?

Yes — use the print dialog and choose Save as PDF.


Related months

Leave a Comment