JS Temporal PlainDateTime
Date and Time Without Time Zone
What You Will Learn:
- How to use JavaScript Temporal.PlainDateTime
- How to work with date and time without a time zone
- How to add and subtract dates
- How to compare dates safely
Note
A Temporal.PlainDateTime represents a date and time without a time zone.
It is useful when you need both date and time, but not time zone calculations.
Create a PlainDateTime
You can create a PlainDateTime object from a string.
Example
// Create a PlainDateTime object
const dateTime = Temporal.PlainDateTime.from("2026-05-17T10:00:00");
Try it Yourself »
You can also create a PlainDateTime object using numeric values.
Example
// Create a PlainDateTime object
const dateTime = new Temporal.PlainDateTime(2026, 5, 17, 10, 0);
Try it Yourself »
Note
In a Temporal object, months start at 1.
In the legasy Date object, months start at 0.
Get the Current Date and Time
Use Temporal.Now.plainDateTimeISO() to get the current date and time.
Combine Date and Time
You can combine PlainDate and PlainTime to create a PlainDateTime.
Example
// Create a PlainDate object
const date = Temporal.PlainDate.from("2026-05-17");
// Create a PlainTime object
const time = Temporal.PlainTime.from("14:30");
// Convert into a PlainDateTime object
const dateTime = date.toPlainDateTime(time);
Try it Yourself »
Add or Subtract Time
You can safely add or subtract time.
The original value does not change.
Example
const dateTime = Temporal.PlainDateTime.from("2026-05-17T10:00:00");
const earlier = dateTime.subtract({ minutes: 30 });
const later = dateTime.add({ hours: 2 });
Try it Yourself »
Compare PlainDateTime Values
You can use equals().
Example
const a = Temporal.PlainDateTime.from("2026-05-17T10:00:00");
const b = Temporal.PlainDateTime.from("2026-05-17T10:00:00");
Try it Yourself »
Convert to ZonedDateTime
A PlainDateTime does not include time zone information.
You can convert it to a ZonedDateTime if needed.
Example
const dateTime = Temporal.PlainDateTime.from("2026-05-17T10:00:00");
const zoned = dateTime.toZonedDateTime("Europe/Oslo");
Try it Yourself »
When to Use PlainDateTime
Local event scheduling.
Appointments without international time zone handling.
Forms that collect date and time.
Applications where time zone conversion is not required.
Temporal.PlainDateTime Methods
| Method | Description |
|---|---|
| from() | Returns a new PlainDateTime object from another object or a string |
| toPlainDate() | Returns a new PlainDate object |
| toPlainTime() | Returns a new PlainTime object |
| toZonedDateTime() | Returns a new ZonedDatetime object |
| with() | Returns a new PlainDateTime with specified fields modified |
| withCalendar() | Returns a new PlainDateTime with a different calendar system |
| withPlainTime() | Returns a new PlainDateTime the time part replaced by a new time |
| Arithmetic | |
| add() | Returns a new PlainDateTime with a duration added |
| subtract() | Returns a new PlainDateTime with a duration subtracted |
| round() | Returns a new PlainDateTime rounded to a given unit |
| Comparison | |
| compare() | Returns -1, 0, or 1 from comparing two dates |
| equals() | Returns true if two PlainDateTime objects are identical |
| since() | Returns the difference from another date |
| until() | Returns the difference until another date |
| Formatting | |
| toString() | Returns an ISO 8601 string representation |
| toJSON() | Returns an ISO 8601 string for JSON serialization |
| toLocaleString() | Returns a language-sensitive representation of the date |
| valueOf() | Throws a TypeError (prevents temporals from being converted to primitives) |
Temporal.PlainDateTime Properties
The Temporal.PlainDateTime has 22 properties of calendar date information.
| Property | Description |
| calendarID | Calendar system identifier ("iso8601") |
| day | The day as an integer (1-31) |
| dayOfWeek | The day of the week as an integer (1 = 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 |