bugl
bugl
HomeLearnPatternsPathsSearchPremium
HomeLearnPatternsPaths
Learn/JavaScript/Objects, Classes, and Advanced Patterns
JavaScript•Objects, Classes, and Advanced Patterns

JavaScript Temporal Intro

What is JavaScript Temporal?

Temporal is the new standard for date and time in JavaScript.

New Temporal objects were designed to replace the old Date object .

Unlike legacy Date, Temporal objects are immutable and provide first-class support for time zones, daylight saving time, date arithmetic and non-Gregorian calendars.

Why Was Temporal Created?

The Date object was created in 1995 and has some design issues that still cause bugs today.

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

Example

let d = new Date(2026, 5, 17); // Month 5 = June

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

Example

// 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

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

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 });

Compare With Date

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

Date Example

let d = new Date();

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

FeatureDateTemporal
Time zone supportLimitedBuilt-in
ImmutableNoYes
Date-Only TypeNoYes
Time-Only TypeNoYes
1-Based MonthsNoYes
DST safe arithmeticNoYes
ISO 8601YesYes
RFC 3339YesYes
RFC 9557 iCalendarNoYes
Modern API designNoYes
PrecisionMillisecondsNanoseconds

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.

Revised March 2026

ObjectDescription
Temporal.DurationObject for duration (days, hours, minutes)
Temporal.InstantObject for exact moment in UTC time
Temporal.PlainDateTimeObject for Date and Time only (no time zone)
Temporal.PlainDateObject for Date only (year, month, day)
Temporal.PlainTimeObject for Time only
Temporal.PlainYearMonthObject for Year and Month only
Temporal.PlainMonthDayObject for Month and Day only
Temporal.ZonedDateTimeObject for Date and Time with time zone
Temporal.NowContainer for temporal methods

Browser Support

Temporal is a major update to the JavaScript standard (TC39).

It is currently supported in Chrome, Edge, Firefox, and Opera and is expected to reach full availability across browsers before the summer of 2026.

Chrome 144Edge 144Firefox 139SafariOpera 128
Jan 2026Jan 2026May 2025🚫Feb 2026

The Safari implementation can be tested in Safari Technology Preview by enabling the --use-temporal runtime flag.

Polyfill

Until Safari supports Temporal natively, you can use the official polyfill:

<script
src="https://cdn.jsdelivr.net/npm/@js-temporal/polyfill/dist/index.umd.js">
</script>

Previous

JavaScript Objects

Next

JavaScript Iterables

This chapter

Overview
123

Lessons

539m

Read time

1. JavaScript Objects2. JavaScript Temporal Tutorial3. JavaScript Loops4. JavaScript Advanced Functions5. JavaScript Objects6. JavaScript Temporal Intro7. JavaScript Iterables8. JavaScript Function Definitions9. JavaScript Object Properties10. JavaScript Temporal vs Date11. JavaScript Iterators12. JavaScript Callbacks13. JavaScript Object Methods14. JavaScript Temporal Duration15. JavaScript Generators16. The JavaScript this Keyword17. JavaScript this Keyword18. JavaScript Temporal Instant19. JavaScript Function call()20. JavaScript Display Objects21. JavaScript PlainDateTime22. JavaScript Function apply()23. JavaScript Object Constructors24. JavaScript Temporal PlainDate25. JavaScript Function bind()26. JavaScript PlainYearMonth27. Self-Invoking Functions28. JavaScript PlainMonthDay29. JavaScript Closures30. JavaScript Temporal PlainTime31. JavaScript Objects - Advanced32. JavaScript ZonedDateTime33. JavaScript Object Definitions34. JavaScript Temporal Now35. this in JavaScript Objects36. JS Temporal Arithmetic37. JavaScript Object Iterations38. JS Temporal Differences39. JavaScript Object Accessors40. JS Temporal Compare41. JavaScript Object Management42. JavaScript Temporal Conversion43. JavaScript Object Protection44. Temporal Display Formats45. JavaScript Object Prototypes46. JavaScript Temporal Mistakes47. JavaScript Classes48. Migrate from Date to Temporal49. JavaScript Class Inheritance50. Temporal Standards51. JavaScript Static Methods52. Asynchronous JavaScript53. Asynchronous Programming54. JavaScript Timeouts55. JavaScript Callbacks56. JavaScript Promises57. JavaScript async and await58. JavaScript fetch API59. Debugging Async JavaScript60. JavaScript Modules61. JavaScript Modules Export62. JavaScript Modules Import63. JS Module Namespace64. JavaScript Dynamic Modules65. JavaScript Meta Programming66. JavaScript Reflect67. JavaScript Proxy68. JavaScript Typed Arrays69. Typed Array Methods70. JavaScript ArrayBuffer71. JavaScript DataView72. JavaScript Atomics73. JavaScript HTML DOM Navigation74. JavaScript HTML DOM Elements (Nodes)75. JavaScript HTML DOM Collections76. JavaScript HTML DOM Node Lists77. JavaScript Window - The Browser Object Model78. JavaScript Window Screen79. JavaScript Window Location80. JavaScript Window History81. JavaScript Window Navigator82. JavaScript Popup Boxes83. JavaScript Timing Events84. JavaScript Cookies85. Web APIs - Introduction86. JavaScript Fetch API87. Web Geolocation API88. Web History API89. Pointer Events API90. Web Storage API91. JavaScript Validation API92. Web Workers API93. AJAX Introduction94. AJAX - The XMLHttpRequest Object95. AJAX - XMLHttpRequest96. AJAX - Server Response97. AJAX XML Example98. AJAX PHP Example99. AJAX ASP Example100. AJAX Database Example101. XML Applications102. JavaScript JSON103. JSON Syntax104. JSON vs XML105. JSON Data Types106. JSON.parse()107. JSON.stringify()108. JSON Object Literals109. JSON Array Literals110. JSON PHP111. JSON HTML112. JSONP113. JavaScript / jQuery DOM Selectors114. JavaScript / jQuery HTML Elements115. JavaScript / jQuery CSS Styles116. JavaScript / jQuery HTML DOM117. JavaScript Graphics118. HTML Canvas119. Plotly.js120. Chart.js121. Google Chart122. D3.js123. JavaScript Interview Preparation

On this page

What is JavaScript Temporal?Why Was Temporal Created?A Simple Temporal ExampleCompare With DateSeparate ObjectsWhen to Use Each ObjectTemporal Objects are ImmutableTemporal Dates are DST-SafeTemporal Dates Uses RFC 5545JavaScript Date vs TemporalWhen to Use Temporal?Revised March 2026Browser SupportPolyfill