Date and Time in JavaScript
Introduction
The built-in Date object represents a moment in time. You use it for timestamps, formatting display strings, and comparing deadlines. JavaScript dates are tricky (time zones, parsing quirks)—this chapter covers creation, getters/setters, comparison, and modern Intl formatting at a practical level.
Prerequisites
Create a Date
javascript
// Now
const now = new Date();
console.log(now.toString());
// Specific components (month is 0-based)
const launch = new Date(2026, 4, 20, 14, 30, 0);
console.log(launch);
// ISO string parse
const parsed = new Date("2026-05-20T14:30:00.000Z");
console.log(parsed.toISOString());Warning
new Date("2026-05-20") parsing can vary by engine and locale. Prefer ISO strings with timezone (Z or offset) in APIs.
Read Components
javascript
// Local getters
const d = new Date();
console.log(d.getFullYear());
console.log(d.getMonth());
console.log(d.getDate());
console.log(d.getHours());
console.log(d.getDay());UTC getters: getUTCHours(), getUTCDate(), etc.
Timestamps (Milliseconds)
javascript
// Epoch ms — good for math and storage
const t1 = Date.now();
const t2 = new Date().getTime();
console.log(t2 - t1);
const deadline = Date.now() + 7 * 24 * 60 * 60 * 1000;
console.log(new Date(deadline).toISOString());Compare Dates
javascript
// Compare numeric timestamps
const a = new Date("2026-01-01");
const b = new Date("2026-06-01");
console.log(a < b);
console.log(a.getTime() === b.getTime());Format for Users with Intl
javascript
// Locale-aware formatting
const eventDate = new Date("2026-05-20T18:00:00Z");
const formatted = new Intl.DateTimeFormat("en-US", {
dateStyle: "medium",
timeStyle: "short",
}).format(eventDate);
console.log(formatted);Relative time (modern environments):
javascript
// Relative label
const rtf = new Intl.RelativeTimeFormat("en", { numeric: "auto" });
console.log(rtf.format(-1, "day"));Mini Example: Is Subscription Expired?
javascript
function isExpired(expiresAtIso) {
const expires = new Date(expiresAtIso).getTime();
return Date.now() > expires;
}
console.log(isExpired("2020-01-01T00:00:00.000Z"));
console.log(isExpired("2099-01-01T00:00:00.000Z"));FAQ
Should I use Date for time zones?
Date stores UTC internally; display with Intl or libraries like Temporal (future standard) for complex zones.
Month 0–11?
Yes—getMonth() returns 0 for January.
JSON and dates?
JSON.stringify(new Date()) produces an ISO string—JSON.parse does not auto-revive Date objects.