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:0003:05:00-04:00 中选择。第二个,dtAmbiguous,由于夏令时向后切换而出现了两次,所以我们需要从时间 01:05:00-04:0001: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

浏览器兼容性

另见