JS Temporal Plain Dates
What is JavaScript Temporal?
The Temporal API is a new standard for date and time management in JavaScript.
The Temporal API is designed to replace the old Date object.
Temporal PlainDate Objects
Plain dates are time-zone-unaware dates and times:
| Temporal.PlainDate | Calendar date only (2026-05-21) |
| Temporal.PlainTime | Time of day only (14:30:00) |
| Temporal.PlainDateTime | Full date and time (2026-01-24 14:30:00) |
| Temporal.PlainMonthDay | Month and day only (05-01) |
| Temporal.PlainYearMonth | Year and month only (2026-05) |
Temporal.PlainDate()
The Temporal.PlainDate() method creates a temporal date object with no time zone.
The Temporal.PlainDate() method above:
- Uses a direct constructor call
- Expects numeric arguments (year, month, day).
Temporal.PlainDate.from()
Temporal.PlainDate.from() also lets you to create a date with no time zone:
The Temporal.PlainDate.from()method above:
- Parses the input using ISO 8601 parsing rules
- Accepts strings: "2026-05-01"
- Accepts objects: { year:2026, month:5, day:1 }
- Accepts temporal: PlainDate
Note
Parsing means validation pluss automatic conversion.
When to Use Which?
Use new Temporal.PlainDate() when:
- You have trusted numeric values
- You want speed
- You want predictable construction
- You are doing date math
Use Temporal.PlainDate.from() when:
- You are handling user input (strings)
- You are handling external data (JSON)
- You want maximum flexibility
Temporal.PlainDateTime()
The PlainDateTime() method creates a temporal date and time object.
It returns a calendar date and a wall-clock time with no time zone.
Return example: 2026-05-01T10:00:00.
Note
A PlainDateTime is essentially the combination of a Temporal.PlainDate() and a Temporal.PlainTime().
The Temporal.PlainDateTime Object
The Temporal.PlainDate object has 22 properties that represent specific calendar date information.
These include calendar identification, specific day/month/year details, era information, and various calendar-calculated metrics:
| Property | Description |
| calendarID | The identifier of the calendar system ("iso8601") |
| day | The day as an integer (1-31) |
| dayOfWeek | The day of the week as an integer (1 for Monday) |
| dayOfYear | The ordinal day of the year |
| daysInMonth | The total number of days in that month |
| daysInWeek | The total number of days in that week |
| daysInYear | The total number of days in that year |
| era | The era name of the calendar, if applicable ("gregory") |
| eraYear | The year within the era, if applicable |
| hour | The hour as an integer (0-23 |
| inLeapYear | A boolean indicating if the date falls in a leap year |
| microsecond | The microsecond as an integer (0-999) |
| millisecond | The millisecond as an integer (0-999) |
| minute | The minute as an integer (0-59) |
| month | The month as an integer (1-12) |
| monthCode | A calendar-specific string code for the month ("M01") |
| monthsInYear | The total number of months in that year |
| nanosecond | The nanosecond as an integer (0-999) |
| second | The second as an integer (0-59) |
| weekOfYear | The week number within the year |
| year | The year as an integer |
| yearOfWeek | The year that the week belongs to |
Temporal.PlainDate()
The Temporal.PlainDate() method creates a temporal date object with no time zone.
It returns an ISO 8601 calendar date without a time or time zone.
Return example: 2026-05-01.
The Temporal.PlainDate Object
The Temporal.PlainDate object has 16 properties that represent specific calendar date information.
These include calendar identification, specific day/month/year details, era information, and various calendar-calculated metrics:
| Property | Description |
| calendarID | The identifier of the calendar system ("iso8601") |
| day | The day as an integer (1-31) |
| dayOfWeek | The day of the week as an integer (1 for Monday) |
| dayOfYear | The ordinal day of the year |
| daysInMonth | The total number of days in that month |
| daysInWeek | The total number of days in that week |
| daysInYear | The total number of days in that year |
| era | The era name of the calendar, if applicable ("gregory") |
| eraYear | The year within the era, if applicable |
| inLeapYear | A boolean indicating if the date falls in a leap year |
| month | The month as an integer (1-12) |
| monthCode | A calendar-specific string code for the month ("M01") |
| monthsInYear | The total number of months in that year |
| weekOfYear | The week number within the year |
| year | The year as an integer |
| yearOfWeek | The year that the week belongs to |
Note
A PlainDate object is essentially the date part of a Temporal.PlainDateTime object, with the time information removed.
Temporal.PlainTime()
The Temporal PlainTime() method creates a time object with no date.
It returns an ISO 8601 wall-clock time without a date or time zone.
Return example: 10:30:00.
Temporal.PlainMonthDay()
The Temporal.PlainMonthDay() method create a temporal month and day object.
It returns the month and day of an ISO 8601 calendar date, without a year or a time zone.
Return example: 05-01.
Temporal.PlainYearMonth()
The Temporal.PlainYearMonth() method creates a temporal time and year object.
It returns the year and month of an ISO 8601 calendar date, without a day or a time zone.
Return example: 2026-05.
Temporal Calendars
new Temporal.PlainDate(...) defaults to ISO 8601.
If you want a specific calendar, you CAN add a calendrer parameter:
Example
new Temporal.PlainDate(2026, 5, 1, 'iso8601')
.from(...) defaults to ISO 8601.
You CANNOT add a calendar parameter, but if the input string includes a calendar, it is used:
Example
Temporal.PlainDate.from('2026-05-01[u-ca=iso8601]')