目录
Convert an ISO string to a Date object in JavaScript
在 JavaScript 中将 ISO 字符串转换为 Date 对象
使用Date()
构造函数将 ISO 字符串转换为日期对象。
构造函数Date()
将轻松解析 ISO 8601 字符串并返回一个Date
对象。
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
构造函数。
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 字符串完全相同的时间)。
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
不存在,则设置为本地时间(这仅适用于提供时间的情况)。
Z
的 表示 UTC,换句话说,与 UTC 的零小时、分钟和秒的偏移量。这是一种可视化事物的简单方法。
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 格式:
- 将日期字符串传递给
Date()
构造函数。 - 调用对象
toISOString()
上的方法Date
。 - 该
toISOString
方法返回一个 ISO 8601 格式的字符串,表示给定的日期。
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
.
const dateStr = '2022-07-21'; const isoStr = dateStr + 'T00:00:00.000Z'; console.log(isoStr); // 👉️ "2022-07-21T00:00:00.000Z"
这是一个示例,其中我们拆分字符串并将
前导零添加到月份和日期组件以获得有效的 ISO 字符串。
// 👇️ 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
.
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: