bugl
bugl
HomeLearnPatternsPathsSearch
HomeLearnPatternsPathsSearch

Loading lesson path

Learn/JavaScript/Objects, Classes, and Advanced Patterns
JavaScript•Objects, Classes, and Advanced Patterns

JavaScript Temporal Mistakes

Flash cards

Review the key moves

1/4
Core idea

What is the main idea behind JavaScript Temporal Mistakes?

Lesson checks

Practice each idea before moving on

Short Mimo-style checks built from this lesson's code, terms, and sequence.

1Quick choice

Which statement best captures the main point of this lesson?

2Fill blank

Complete the missing token from the example code.

___ instant = Temporal.Instant.from("2026-05-17T14:30:00");
3Order

Put the learning moves in the order that makes the concept easiest to apply.

Using PlainDateTime with Time Zone
Missing UTC (Z) for Instant
JavaScript Temporal Mistakes

Temporal is a powerful API, but it can be confusing at first.

  • Remember to use the correct Temporal type
  • Avoid implicit conversions
  • Always handle time zones correctly
  • Use compare() instead of < and >
  • Remember that Temporal Objects are immutable

Here are some common mistakes and how to avoid them.

Missing UTC (Z) for Instant

An Instant must always include UTC.

Wrong

const instant = Temporal.Instant.from("2026-05-17T14:30:00");

Using PlainDateTime with Time Zone

PlainDateTime does not support time zones.

Wrong

const date = Temporal.PlainDateTime.from("2026-05-17T14:30:00Z");

Comparing Different Types

Temporals can go wrong when comparing different types.

Wrong

const d1 = Temporal.PlainDate.from("2026-05-17");
const d2 = Temporal.Instant.from("2026-05-17T14:30Z");
Temporal.PlainDate.compare(d1, d2);

Correct

const d1 = Temporal.PlainDate.from("2026-05-17");
const d2 = Temporal.PlainDateTime.from("2026-05-17T14:30");
Temporal.PlainDate.compare(d1, d2);

Using equals() with Different Types

Temporals can go wrong when comparing different types.

Wrong

const d1 = Temporal.PlainDate.from("2026-05-17");
const d2 = Temporal.Instant.from("2026-05-17T14:30Z");
d1.equals(d2);

Correct

const d1 = Temporal.PlainDate.from("2026-05-17");
const d2 = Temporal.PlainDateTime.from("2026-05-17T14:30");
d1.equals(d2.toPlainDate());

Using ==, < or > for Comparison

Temporal objects cannot be compared with ==, ===, < or >.

Wrong

const d1 = Temporal.PlainDate.from("2026-05-17");
const d2 = Temporal.PlainDate.from("2026-05-17");
d1 === d2; // False
d1 == d2;  // False
d1 < d2;   // TypeError
d1 > d2;   // TypeError

Expecting Mutation

Temporal objects are immutable.

Wrong

const date = Temporal.PlainDate.from("2026-05-17");
date.add({ months: 1 });

Using valueOf()

Temporal objects do not convert to numbers.

Example

const date = Temporal.PlainDate.from("2026-05-17");
try {
  text = date.valueOf();
} catch (err) {
text = err.name;
}

Using Instant for Local Time

Instant is always UTC (not local time).

Temporal.Now.instant(); // not local time

Using PlainDate for Time

PlainDate has no time.

Temporal.PlainDate.from("2026-05-17T14:30");

Forgetting Time Zone in ZonedDateTime

ZonedDateTime requires a time zone.

Temporal.ZonedDateTime.from("2026-05-17T14:30:00");
Temporal.ZonedDateTime.from("2026-05-17T14:30:00+02:00[Europe/Oslo]");

Not Choosing the Right Type

Each Temporal type has a specific purpose.

TypeUse
InstantExact moment (UTC)
PlainDateDate only
PlainTimeTime only
PlainDateTimeDate + time only
ZonedDateTimeDate + time + time zone
DurationLength of time only

Previous

JavaScript Object Prototypes

Next

JavaScript Classes