Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP W3.CSS C C++ C# HOW TO BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS DSA TYPESCRIPT ANGULAR ANGULARJS GIT POSTGRESQL MONGODB ASP AI R GO KOTLIN SWIFT SASS VUE GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE INTRO TO PROGRAMMING INTRO TO HTML & CSS BASH RUST TOOLS

JS Tutorial

JS Home JS Introduction JS Where To JS Output JS Syntax JS Operators JS If Conditions JS Loops JS Strings JS Numbers JS Functions JS Timers JS Objects JS Scope JS Dates JS Arrays JS Sets JS Maps JS Iterations JS Math JS RegExp JS Data Types JS Errors JS Debugging JS Style Guide JS Reference JS Projects  New JS Versions JS HTML DOM JS HTML Events JS HTML First

JS Web API

JS Window API JS Fetch API JS JSON JS Web API

JS Advanced

JS Temporal  New JS Functions JS Objects JS Classes JS Asynchronous JS Modules JS Meta & Proxy JS Typed Arrays JS DOM Navigation JS Graphics

Old Technologies

JS AJAX JS jQuery JS JSONP

JS Examples

JS Examples

JavaScript Temporal Why?

Why Was Temporal Created?

The Date object was created in 1995 and has some design issues that causes bugs.

For example, months in Date are zero-based, which is confusing.

Another problem is Date methods can change the Date object (mutation), which can create unexpected results.

Temporal was created to solve these issues with clearer object types and predictable behavior.

Examples

Months in Date are zero-based, which is confusing:

// Month 5 is June
let d = new Date(2026, 5, 17);
Try it Yourself »

Date methods change the same object (mutation), which can create unexpected results:

// Create a Date
let d = new Date(2026, 5, 17);

// Add 7 days
d.setDate(d.getDate() + 7);

// Here the original date (d) is lost
Try it Yourself »

A Simple Temporal Example

With Temporal, you can get today's date and add days in a clear and safe way.

Example

// Create a Temporal object
const today = Temporal.Now.plainDateISO();

// Add a duration
const nextWeek = today.add({ days: 7 });
Try it Yourself »

Compare With Date

With JavaScript Date, you only have one type of date object.

Date Example

let d = new Date();
Try it Yourself »

Separate Objects

Temporal gives you separate objects depending on what you need:

  • Instant - Exact moment in UTC

  • PlainDate - Date only

  • PlainDateTime - Date and time only

  • ZonedDateTime - Date and time with zone


When to Use Each Object

  • Instant - For timestamps and comparisons

  • PlainDate - For birthdays and calendar dates

  • PlainDateTime - For local scheduling tasks

  • ZonedDateTime - For time zone-aware apps



Temporal Objects are Immutable

Temporal objects are immutable, which means they cannot be changed after they are created.

Temporal objects return a new value instead of modifying the existing one.


Temporal Dates are DST-Safe

DST-safe arithmetic ensures time calculations (addition and subtraction) remain accurate across Daylight Saving Time (DST) transitions, preventing 1-hour errors.

It involves using timezone and calendar-aware objects (ZonedDateTime) that understand local clock shifts.


Temporal Dates Uses RFC 5545

RFC 5545 (Internet Calendaring and Scheduling Core Object Specification), is the industry standard for exchanging calendar and scheduling information.

It allows different systems (like Google Calendar, Apple Calendar, and Microsoft Outlook) to communicate seamlessly.


JavaScript Date vs Temporal

Feature Date Temporal
ISO 8601 Date/Time Yes Yes
RFC 3339 Date/Time Yes Yes
RFC 9557 Date/Time No Yes
Time zone support Limited Built-in
Immutable No Yes
Date-Only Type No Yes
Time-Only Type No Yes
1-Based Months No Yes
DST safe arithmetic No Yes
ISO 8601 Duration No Yes
RFC 9557 iCalendar No Yes
Modern API design No Yes
Precision Milliseconds Nanoseconds

JavaScript Temporal is a set of built-in date and time objects that are easier and safer to use than JavaScript Date.

Temporal uses distinct classes for dates and times to prevent bugs related to local time adjustments (like DST transitions).


When to Use Temporal?

Use Temporal when you need reliable date and time handling.

  • You need correct time zone support

  • You need safe date arithmetic (add / subtract, since / until)

  • You need to avoid DST bugs

  • You need predictable and readable code

You may still have to use JavaScript Date to support environments where Temporal is not available.


Temporal Objects

Revised March 2026

ObjectDescription
Temporal.Duration Object for duration (days, hours, minutes)
Temporal.Instant Object for exact moment in UTC time
Temporal.PlainDateTime Object for Date and Time only (no time zone)
Temporal.PlainDate Object for Date only (year, month, day)
Temporal.PlainTime Object for Time only
Temporal.PlainYearMonth Object for Year and Month only
Temporal.PlainMonthDay Object for Month and Day only
Temporal.ZonedDateTime Object for Date and Time with time zone
Temporal.Now Container for temporal methods

×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
sales@w3schools.com

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
help@w3schools.com

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookies and privacy policy.

Copyright 1999-2026 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.

-->