在 JavaScript 中将 ISO 字符串转换为 Date 对象

目录

Convert an ISO string to a Date object in JavaScript

  1. 在 JavaScript 中将 ISO 字符串转换为 Date 对象
  2. 使用 JavaScript 将日期字符串转换为 ISO 格式

在 JavaScript 中将 ISO 字符串转换为 Date 对象

使用Date()构造函数将 ISO 字符串转换为日期对象。

构造函数Date()将轻松解析 ISO 8601 字符串并返回一个Date对象。

索引.js
const isoStr1 = '2022-07-21T09:35:31.820Z'; // ✅ Create Date object (setting date to UTC) const date1 = new Date(isoStr1); console.log(date1); // 👉️ Thu Jul 21 2022 12:35:31 GMT+0300 // ✅ Create Date object (setting date to local time) const date2 = new Date(isoStr1.slice(0, -1)); console.log(date2); // 👉️ Thu Jul 21 2022 09:35:31 GMT+0300

我们使用Date()Date构造函数从 ISO 字符串创建对象。

在第一个示例中,我们直接将 ISO 字符串传递给Date
构造函数。

索引.js
const isoStr1 = '2022-07-21T09:35:31.820Z'; // ✅ Create Date object (setting date to UTC) const date1 = new Date(isoStr1); console.log(date1); // 👉️ Thu Jul 21 2022 12:35:31 GMT+0300

ISO 字符串中的时间是09:35:31,但是,创建的Date对象显示12:35:31

这是因为我的时区比协调世界时 (UTC) 早 3 小时。

将 ISO 字符串转换为存储本地时间的 Date 对象

在第二个示例中,我们使用
sliceZ方法从 ISO 字符串的末尾删除了
Date在本地时间创建了一个对象
09:35:31(与我们的 ISO 字符串完全相同的时间)。

索引.js
const isoStr1 = '2022-07-21T09:35:31.820Z'; // ✅ Create a Date object (setting the date to local time) const date2 = new Date(isoStr1.slice(0, -1)); console.log(date2); // 👉️ Thu Jul 21 2022 09:35:31 GMT+0300

如果Z存在,则Date设置为 UTC。如果Z不存在,则设置为本地时间(这仅适用于提供时间的情况)。

ISO 字符串末尾Z的 表示 UTC,换句话说,与 UTC 的零小时、分钟和秒的偏移量。

这是一种可视化事物的简单方法。

索引.js
const isoStr1 = '2022-07-21T09:35:31.820Z'; // ✅ Create Date object (setting date to UTC) const date1 = new Date(isoStr1); console.log(date1); // 👉️ Thu Jul 21 2022 12:35:31 GMT+0300 console.log(date1.getUTCHours()); // 👉️ 9 // ✅ Create Date object (setting date to local time) const date2 = new Date(isoStr1.slice(0, -1)); console.log(date2); // 👉️ Thu Jul 21 2022 09:35:31 GMT+0300 console.log(date2.getUTCHours()); // 👉️ 6

当我们将 ISO 字符串直接传递给Date()构造函数时,这些getUTC*
方法会返回与 ISO 字符串中存在的时间完全相同的组件。

为了保持一致性,当您必须向用户呈现日期和时间时,您应该主要使用本地时间,但您应该以 UTC(有效的 ISO 8601 字符串)存储实际值。

Z例如,如果您在数据库中存储午夜 (00:00) 的当地时间(不带等等。这些都是相隔数小时的不同时刻。

使用 JavaScript 将日期字符串转换为 ISO 格式

将日期字符串转换为 ISO 格式:

  1. 将日期字符串传递给Date()构造函数。
  2. 调用对象toISOString()上的方法Date
  3. toISOString方法返回一个 ISO 8601 格式的字符串,表示给定的日期。
索引.js
const dateStr = '2022-07-21'; const date = new Date(dateStr); const iso = date.toISOString(); console.log(iso); // 👉️ "2022-07-21T00:00:00.000Z"

我们将日期字符串传递给
Date()构造函数以创建一个
Date对象。

然后,我们通过调用对象的toISOString方法
获得了日期字符串的 ISO 格式表示
Date

Date()如果您的日期字符串没有以构造函数可以理解的方式格式化,您有 2 个选择:

  • 将日期字符串格式化为YYYY-MM-DDTHH:mm:ss.sssZ,例如
    2022-07-21T00:00:00.000Z
  • 以构造函数可以理解的方式格式化日期字符串Date(),例如YYYY-MM-DD.

例如,如果您有一个格式为 的日期字符串YYYY-MM-DD,您可以只附加THH:mm:ss.sssZ.

索引.js
const dateStr = '2022-07-21'; const isoStr = dateStr + 'T00:00:00.000Z'; console.log(isoStr); // 👉️ "2022-07-21T00:00:00.000Z"

这是一个示例,其中我们拆分字符串并将
前导零添加到月份和日期组件以获得有效的 ISO 字符串。

索引.js
// 👇️ formatted as m/d/yyyy const dateStr = '7/24/2022'; function padTo2Digits(num) { return num.toString().padStart(2, '0'); } const [month, date, year] = dateStr.split('/'); const isoStr = `${year}-${padTo2Digits(month)}-${padTo2Digits( date, )}T00:00:00.000Z`; console.log(isoStr); // 👉️ "2022-07-24T00:00:00.000Z"

我们使用
String.split方法在每个正斜杠上拆分日期字符串/

我们使用数组解构将包含月份、日期和年份的子字符串分配给变量。

月份和日期值可以是个位数(小于10),因此我们使用padTo2Digits函数在必要时添加前导零。

结果是一个有效的 ISO 8601 字符串,格式为YYYY-MM-DDTHH:mm:ss.sssZ.

额外资源

您可以通过查看以下教程来了解有关相关主题的更多信息: