Temporal.PlainDateTime.prototype.toZonedDateTime()
Temporal.PlainDateTime
实例的 toZonedDateTime()
方法返回一个新的 Temporal.ZonedDateTime
实例,该实例表示与此纯日期时间相同的日期时间,但位于指定的时区。
语法
js
toZonedDateTime(timeZone)
toZonedDateTime(timeZone, options)
参数
timeZone
-
一个字符串或一个
Temporal.ZonedDateTime
实例,表示要使用的时区。如果是Temporal.ZonedDateTime
实例,则使用其时区。如果是一个字符串,它可以是命名时区标识符、偏移时区标识符,或者包含时区标识符或偏移的日期时间字符串(有关更多信息,请参阅时区和偏移)。 options
可选-
包含以下属性的对象
disambiguation
可选-
一个字符串,指定当此纯时间在一个时区中对应于零个或多个瞬时(通常是由于夏令时切换)时应执行的操作。可能的值有
"compatible"
、"earlier"
、"later"
和"reject"
。默认为"compatible"
。有关这些值的更多信息,请参阅从本地时间到 UTC 时间的歧义和间隙。
返回值
一个新的 Temporal.ZonedDateTime
实例,表示与此纯日期时间相同的日期时间,但位于指定的时区。
异常
RangeError
-
在以下情况之一中抛出
- 任何选项无效。
timeZone
不是有效的时区标识符。- 挂钟时间在时区中存在歧义,并且
options.disambiguation
设置为"reject"
。
TypeError
-
如果任何参数的类型与预期不符,则抛出此错误。
示例
使用 toZonedDateTime()
js
const dt = Temporal.PlainDateTime.from("2021-08-01T12:34:56");
const zdt = dt.toZonedDateTime("America/New_York");
console.log(zdt.toString()); // '2021-08-01T12:34:56-04:00[America/New_York]'
const dt2 = Temporal.PlainDateTime.from("2021-01-01T12:34:56");
const zdt2 = dt2.toZonedDateTime("America/New_York");
console.log(zdt2.toString()); // '2021-01-01T12:34:56-05:00[America/New_York]'
处理歧义时间
下面,我们有两个挂钟时间,我们希望在 America/New_York
时区中解释它们。第一个,dtNotExist
,由于夏令时向前切换而从未存在,所以我们需要从时间 01:05:00-05:00
或 03:05:00-04:00
中选择。第二个,dtAmbiguous
,由于夏令时向后切换而出现了两次,所以我们需要从时间 01:05:00-04:00
或 01:05:00-05:00
中选择。有关这种情况的更详细解释,请参阅从本地时间到 UTC 时间的歧义和间隙。
js
const dtNotExist = Temporal.PlainDateTime.from("2024-03-10T02:05:00");
const dtAmbiguous = Temporal.PlainDateTime.from("2024-11-03T01:05:00");
// Default: compatible
console.log(dtNotExist.toZonedDateTime("America/New_York").toString());
// '2024-03-10T03:05:00-04:00[America/New_York]'
console.log(dtAmbiguous.toZonedDateTime("America/New_York").toString());
// '2024-11-03T01:05:00-04:00[America/New_York]'
// Use the earlier time for ambiguous times
console.log(
dtNotExist
.toZonedDateTime("America/New_York", { disambiguation: "earlier" })
.toString(),
);
// '2024-03-10T01:05:00-05:00[America/New_York]'
console.log(
dtAmbiguous
.toZonedDateTime("America/New_York", { disambiguation: "earlier" })
.toString(),
);
// '2024-11-03T01:05:00-04:00[America/New_York]'
// Use the later time for ambiguous times
console.log(
dtNotExist
.toZonedDateTime("America/New_York", { disambiguation: "later" })
.toString(),
);
// '2024-03-10T03:05:00-04:00[America/New_York]'
console.log(
dtAmbiguous
.toZonedDateTime("America/New_York", { disambiguation: "later" })
.toString(),
);
// '2024-11-03T01:05:00-05:00[America/New_York]'
// Throw an error for ambiguous times
dtNotExist.toZonedDateTime("America/New_York", { disambiguation: "reject" });
// RangeError: instant is ambiguous
规范
规范 |
---|
Temporal # sec-temporal.plaindatetime.prototype.tozoneddatetime |
浏览器兼容性
加载中…