A good first building block

Today's date on a calendar

A semantic month table with weekday headers, leap-year handling and today's date highlighted.

HTMLCSSJavaScriptNo dependencies
Edit in playground

Live preview

Explore the result below

HTML

<main><h1>Your month at a glance</h1><table><caption id="month">Current month</caption><thead><tr><th scope="col">Sun</th><th scope="col">Mon</th><th scope="col">Tue</th><th scope="col">Wed</th><th scope="col">Thu</th><th scope="col">Fri</th><th scope="col">Sat</th></tr></thead><tbody id="calendar"></tbody></table><p id="today"></p></main>
Read the complete HTML document
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>My code example</title>
<style>
:root{font-family:system-ui,sans-serif;color:#18223b}*{box-sizing:border-box}body{margin:0;min-height:100vh;padding:24px;background:#edf1ff;display:grid;place-items:center}main{width:min(100%,480px);background:white;border-radius:20px;padding:24px}h1{font-size:24px;margin:0 0 16px}button,input{font:inherit}button{min-height:44px;border:1px solid #afbddd;border-radius:10px;padding:10px 14px;background:#eff3ff;color:#18223b;cursor:pointer}button:focus-visible,input:focus-visible{outline:3px solid #3658bf;outline-offset:3px}p{line-height:1.65}button:disabled{opacity:.5;cursor:default}table{width:100%;border-collapse:separate;border-spacing:4px;text-align:center}caption{font-weight:700;margin-bottom:16px}th,td{height:38px}th{font-size:12px;color:#58647b}td{border-radius:8px;background:#f5f7fe}td:empty{background:transparent}[aria-current="date"]{background:#3658bf;color:white;font-weight:700}time{display:block;padding:6px}
</style>
</head>
<body>
<main><h1>Your month at a glance</h1><table><caption id="month">Current month</caption><thead><tr><th scope="col">Sun</th><th scope="col">Mon</th><th scope="col">Tue</th><th scope="col">Wed</th><th scope="col">Thu</th><th scope="col">Fri</th><th scope="col">Sat</th></tr></thead><tbody id="calendar"></tbody></table><p id="today"></p></main>
<script>
const now=new Date(),year=now.getFullYear(),month=now.getMonth(),first=new Date(year,month,1).getDay(),days=new Date(year,month+1,0).getDate(),body=document.querySelector("#calendar");
document.querySelector("#month").textContent=now.toLocaleDateString([], {month:"long",year:"numeric"});
for(let slot=0;slot<Math.ceil((first+days)/7)*7;slot++){if(slot%7===0)body.append(document.createElement("tr"));const td=document.createElement("td"),day=slot-first+1;if(day>0&&day<=days){const time=document.createElement("time");time.textContent=String(day);time.dateTime=year+"-"+String(month+1).padStart(2,"0")+"-"+String(day).padStart(2,"0");if(day===now.getDate()){time.setAttribute("aria-current","date");time.setAttribute("aria-label",day+", today");}td.append(time);}body.lastChild.append(td);}
document.querySelector("#today").textContent="Today is "+now.toLocaleDateString([], {weekday:"long",month:"long",day:"numeric",year:"numeric"})+".";
</script>
</body>
</html>

A little guide to making it yours

  1. Copy the code and save it in a file named example.html.
  2. Open the file in your browser to see the complete example.
  3. Change the text and structure in the HTML.
  4. Adjust the colors and spacing in the CSS, or experiment in the playground.

How it works

Date(year, month + 1, 0) supplies the month's final day, including leap years. The table uses column headers and time elements with machine-readable dates. Dates use the device's local timezone. This snapshot updates on page load; refresh if it stays open overnight.

Historical purpose: The stage-one 2014 archive recovery verified this exact detail purpose. This is an original modern implementation; no archived third-party code, credit link, remote script or guessed numeric preview mapping is reused.

Troubleshooting and limits

The calendar uses the device timezone and makes a snapshot on load. Refresh if it stays open overnight. Date handles leap years; keep the table headers and time elements for readable dates. It does not add events or synchronize a calendar account.

This is newly authored code. It uses system fonts and no external assets.

Keep the ideas going