如何正确使用 ES11 中的 Temporal API?

ES11 中引入了一种新的日期时间 API,叫做 Temporal API。它的设计目的是为了解决日常开发中遇到的时间处理问题,例如时区、夏令时、日期计算等。本文将介绍 Temporal API 的基本用法,并提供一些示例代码来帮助读者更好地理解。

Temporal API 的基本概念

Temporal API 的核心是 Temporal 对象,它包含了日期、时间、时区等信息。Temporal API 中有三种类型的 Temporal 对象:

  • Temporal.PlainDate:表示一个日期,不包含时间和时区信息。
  • Temporal.PlainTime:表示一个时间,不包含日期和时区信息。
  • Temporal.PlainDateTime:表示一个日期和时间,不包含时区信息。

除此之外,还有 Temporal.ZonedDateTime 类型,用于表示带时区的日期时间。

Temporal API 的基本用法

创建 Temporal 对象

Temporal.PlainDate、Temporal.PlainTime 和 Temporal.PlainDateTime 都可以通过构造函数来创建。例如:

const date = new Temporal.PlainDate(2022, 8, 1);
const time = new Temporal.PlainTime(12, 30, 0, 0);
const dateTime = new Temporal.PlainDateTime(2022, 8, 1, 12, 30, 0, 0);

其中,年、月、日、时、分、秒、毫秒都是必填参数,如果不填会抛出错误。

Temporal.ZonedDateTime 也可以通过构造函数来创建,但需要指定时区信息。例如:

const timeZone = new Temporal.TimeZone('Asia/Shanghai');
const zonedDateTime = new Temporal.ZonedDateTime(2022, 8, 1, 12, 30, 0, 0, timeZone);

获取 Temporal 对象的属性

Temporal 对象有很多属性可以获取,例如年、月、日、时、分、秒等。可以使用 get 方法来获取。例如:

const dateTime = new Temporal.PlainDateTime(2022, 8, 1, 12, 30, 0, 0);
console.log(dateTime.get('year')); // 2022
console.log(dateTime.get('month')); // 8
console.log(dateTime.get('day')); // 1
console.log(dateTime.get('hour')); // 12
console.log(dateTime.get('minute')); // 30
console.log(dateTime.get('second')); // 0
console.log(dateTime.get('millisecond')); // 0

操作 Temporal 对象

Temporal 对象也支持一些操作,例如加减日期、比较日期等。可以使用 add、subtract、since 等方法来实现。例如:

const date = new Temporal.PlainDate(2022, 8, 1);
const newDate = date.add({ months: 1 });
console.log(newDate.get('year')); // 2022
console.log(newDate.get('month')); // 9

const dateTime1 = new Temporal.PlainDateTime(2022, 8, 1, 12, 30, 0, 0);
const dateTime2 = new Temporal.PlainDateTime(2022, 9, 1, 12, 30, 0, 0);
const duration = dateTime1.until(dateTime2);
console.log(duration.total({ months: true })); // 1

格式化 Temporal 对象

Temporal 对象可以通过 toLocaleString 方法来格式化成字符串。例如:

const dateTime = new Temporal.PlainDateTime(2022, 8, 1, 12, 30, 0, 0);
console.log(dateTime.toLocaleString()); // 8/1/2022, 12:30:00 PM

const timeZone = new Temporal.TimeZone('Asia/Shanghai');
const zonedDateTime = new Temporal.ZonedDateTime(2022, 8, 1, 12, 30, 0, 0, timeZone);
console.log(zonedDateTime.toLocaleString()); // 8/1/2022, 12:30:00 PM CST

示例代码

下面是一些示例代码,帮助读者更好地理解 Temporal API 的用法。

获取当前日期时间

const now = Temporal.now.plainDateTime();
console.log(now.toLocaleString());

计算两个日期时间之间的天数

const dateTime1 = new Temporal.PlainDateTime(2022, 8, 1, 12, 30, 0, 0);
const dateTime2 = new Temporal.PlainDateTime(2022, 9, 1, 12, 30, 0, 0);
const duration = dateTime1.until(dateTime2);
console.log(duration.total({ days: true })); // 31

获取指定日期的下一个周一

const date = new Temporal.PlainDate(2022, 8, 1);
const dayOfWeek = date.get('dayOfWeek');
const nextMonday = date.add({ days: 8 - dayOfWeek });
console.log(nextMonday.toLocaleString());

获取指定日期所在月份的最后一天

const date = new Temporal.PlainDate(2022, 8, 1);
const year = date.get('year');
const month = date.get('month');
const lastDayOfMonth = new Temporal.PlainDate(year, month + 1, 0);
console.log(lastDayOfMonth.toLocaleString());

将日期时间转换成 Unix 时间戳

const dateTime = new Temporal.PlainDateTime(2022, 8, 1, 12, 30, 0, 0);
const unixTimestamp = Math.floor(dateTime.toEpochSeconds() * 1000);
console.log(unixTimestamp);

总结

Temporal API 是一个非常实用的日期时间处理工具,它可以帮助开发者解决很多常见的时间处理问题。本文介绍了 Temporal API 的基本概念和用法,并提供了一些示例代码。希望本文可以帮助读者更好地理解和使用 Temporal API。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65beb09cadd4f0e0ff83dac7