简介
在本实验中,我们将学习如何将日期转换为扩展的 ISO 格式(ISO 8601),包括时区偏移。我们将使用 Date.prototype.getTimezoneOffset() 方法获取时区偏移并将其反转。然后,我们将定义一个辅助函数,将任何传入的数字规范化为整数,并使用 String.prototype.padStart() 将其填充为两位数。最后,我们将使用 Date 原型中的内置方法来构建带有时区偏移的 ISO 8601 字符串。在本实验结束时,你将对如何在 JavaScript 中操作日期有更深入的理解。
将日期转换为带时区的 ISO 格式
要将日期转换为扩展的 ISO 格式(ISO 8601),包括时区偏移,请执行以下步骤:
- 打开终端/SSH 并输入
node开始编码。 - 使用
Date.prototype.getTimezoneOffset()获取时区偏移并将其反转。将其符号存储在diff中。 - 定义一个辅助函数
pad(),它使用Math.floor()和Math.abs()将任何传入的数字规范化为整数,并使用String.prototype.padStart()将其填充为两位数。 - 使用
pad()和Date原型中的内置方法来构建带有时区偏移的 ISO 8601 字符串。
以下是你可以使用的代码:
const toISOStringWithTimezone = (date) => {
const tzOffset = -date.getTimezoneOffset();
const diff = tzOffset >= 0 ? "+" : "-";
const pad = (n) => `${Math.floor(Math.abs(n))}`.padStart(2, "0");
return (
date.getFullYear() +
"-" +
pad(date.getMonth() + 1) +
"-" +
pad(date.getDate()) +
"T" +
pad(date.getHours()) +
":" +
pad(date.getMinutes()) +
":" +
pad(date.getSeconds()) +
diff +
pad(tzOffset / 60) +
":" +
pad(tzOffset % 60)
);
};
使用函数 toISOStringWithTimezone(),并将一个 new Date() 对象作为参数,以获取带时区偏移的 ISO 格式日期。例如:
toISOStringWithTimezone(new Date()); // '2020-10-06T20:43:33-04:00'
总结
恭喜你!你已经完成了“将日期转换为带时区的 ISO 格式”实验。你可以在 LabEx 中练习更多实验来提升你的技能。