Temporal.PlainDate.from()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The Temporal.PlainDate.from()
static method creates a new Temporal.PlainDate
object from another Temporal.PlainDate
object, an object with date properties, or an RFC 9557 string.
Syntax
Temporal.PlainDate.from(info)
Temporal.PlainDate.from(info, options)
Parameters
info
-
One of the following:
-
A
Temporal.PlainDate
instance, which creates a copy of the instance. -
A
Temporal.PlainDateTime
instance, which provides the calendar date in the same fashion asTemporal.PlainDateTime.prototype.toPlainDate()
. -
A
Temporal.ZonedDateTime
instance, which provides the calendar date in the same fashion asTemporal.ZonedDateTime.prototype.toPlainDate()
. -
An RFC 9557 string containing a date and optionally a calendar.
-
An object containing the following properties (in the order they are retrieved and validated):
calendar
Optional-
A string that corresponds to the
calendarId
property. Defaults to"iso8601"
. All other properties are interpreted in this calendar system (unlike theTemporal.PlainDate()
constructor, which interprets the values in the ISO calendar system). day
-
An integer that corresponds to the
day
property. Must be positive regardless of theoverflow
option. era
anderaYear
-
A string and an integer that correspond to the
era
anderaYear
properties. Are only used if the calendar system has eras.era
anderaYear
must be provided simultaneously. At least one ofera
+eraYear
oryear
must be provided. If all ofera
,eraYear
, andyear
are provided, they must be consistent. month
-
Corresponds to the
month
property. Must be positive regardless of theoverflow
option. At least one ofmonth
ormonthCode
must be provided. If bothmonth
andmonthCode
are provided, they must be consistent. monthCode
-
Corresponds to the
monthCode
property. At least one ofmonth
ormonthCode
must be provided. If bothmonth
andmonthCode
are provided, they must be consistent. year
-
Corresponds to the
year
property. At least one ofera
+eraYear
oryear
must be provided. If all ofera
,eraYear
, andyear
are provided, they must be consistent.
The info should explicitly specify a year (as
year
orera
anderaYear
), a month (asmonth
ormonthCode
), and a day.
-
options
Optional-
An object containing the following property:
overflow
Optional-
A string specifying the behavior when a date component is out of range (when using the object
info
). Possible values are:"constrain"
(default)-
The date component is clamped to the valid range.
"reject"
-
A
RangeError
is thrown if the date component is out of range.
Return value
A new Temporal.PlainDate
object, representing the date specified by info
in the specified calendar
.
Exceptions
TypeError
-
Thrown in one of the following cases:
info
is not an object or a string.options
is not an object orundefined
.- The provided properties are insufficient to unambiguously determine a date. You usually need to provide a
year
(orera
anderaYear
), amonth
(ormonthCode
), and aday
.
RangeError
-
Thrown in one of the following cases:
- The provided properties that specify the same component are inconsistent.
- The provided non-numerical properties are not valid; for example, if
monthCode
is never a valid month code in this calendar. - The provided numerical properties are out of range, and
options.overflow
is set to"reject"
.
Examples
Creating a PlainDate from an object
// Year, month, and day
const d1 = Temporal.PlainDate.from({ year: 2021, month: 7, day: 1 });
console.log(d1.toString()); // "2021-07-01"
// Year, month code, and day
const d2 = Temporal.PlainDate.from({ year: 2021, monthCode: "M07", day: 1 });
console.log(d2.toString()); // "2021-07-01"
// Year, month, day in a different calendar
const d3 = Temporal.PlainDate.from({
year: 2021,
month: 7,
day: 1,
calendar: "chinese",
});
// Note: when you construct a date with an object, the date components
// are in *that* calendar, not the ISO calendar. However, toString() always
// outputs the date in the ISO calendar. For example, the year "2021" in
// the Chinese calendar is actually 616 BC in the ISO calendar.
console.log(d3.toString()); // "-000616-08-12[u-ca=chinese]"
// Era, eraYear, month, and day
const d4 = Temporal.PlainDate.from({
era: "meiji",
eraYear: 4,
month: 7,
day: 1,
calendar: "japanese",
});
console.log(d4.toString()); // "1871-07-01[u-ca=japanese]"
Controlling overflow behavior
By default, out-of-range values are clamped to the valid range:
const d1 = Temporal.PlainDate.from({ year: 2021, month: 13, day: 1 });
console.log(d1.toString()); // "2021-12-01"
const d2 = Temporal.PlainDate.from({ year: 2021, month: 2, day: 29 });
console.log(d2.toString()); // "2021-02-28"
const d3 = Temporal.PlainDate.from("2021-02-29");
console.log(d3.toString()); // "2021-02-28"
You can change this behavior to throw an error instead:
const d3 = Temporal.PlainDate.from(
{ year: 2021, month: 13, day: 1 },
{ overflow: "reject" },
);
// RangeError: date value "month" not in 1..12: 13
Creating a PlainDate from a string
const d = Temporal.PlainDate.from("2021-07-01");
console.log(d.toLocaleString("en-US", { dateStyle: "full" }));
// Thursday, July 1, 2021
// Providing a calendar
const d2 = Temporal.PlainDate.from("2021-07-01[u-ca=japanese]");
console.log(
d2.toLocaleString("ja-JP", { calendar: "japanese", dateStyle: "full" }),
);
// 令和3年7月1日木曜日
// Providing a time and an offset (ignored)
const d3 = Temporal.PlainDate.from("2021-07-01T00:00+08:00");
console.log(d3.toString()); // "2021-07-01"
Creating a PlainDate from another Temporal instance
const dt = Temporal.PlainDateTime.from("2021-07-01T12:00");
const d = Temporal.PlainDate.from(dt);
console.log(d.toString()); // "2021-07-01"
const zdt = Temporal.ZonedDateTime.from(
"2021-07-01T00:00+08:00[Asia/Shanghai]",
);
const d2 = Temporal.PlainDate.from(zdt);
console.log(d2.toString()); // "2021-07-01"
const d3 = Temporal.PlainDate.from(d);
console.log(d3.toString()); // "2021-07-01"
Specifications
Specification |
---|
Temporal proposal # sec-temporal.plaindate.from |
Browser compatibility
BCD tables only load in the browser