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