如何在 JavaScript 中解析 JSON 日期
要解析 JSON 日期:
- 使用
toJSON()
方法获取 Date 对象的字符串表示形式。 - 将 JSON 字符串传递给
Date()
构造函数。 Date()
构造函数将解析 ISO 字符串并创建一个 Date 对象。
const json = new Date().toJSON();
console.log(json); // ?️ "2022-10-06T14:29:28.109Z"
const date = new Date(json);
console.log(date); // ?️ Thur Oct 26 2022 14:29:28
可以对有效的 Date 对象调用 toJSON() 方法。
该方法以
ISO 8601
格式返回给定日期的字符串表示形式。
我们可以将调用方法的结果传递给 Date()
构造函数,以从 JSON 字符串创建 Date 对象。
这是相同的示例,但使用了更手动的方法。
const json = JSON.stringify(new Date().toISOString());
console.log(json); // ?️ "2022-10-06T14:29:28.109Z"
const date = new Date(JSON.parse(json));
console.log(date); // ?️ Thur Oct 26 2022 14:29:28
// ?️ "2022-10-06T14:29:28.109Z"
console.log(date.toISOString());
我们使用 toISOString()
方法获取一个字符串,该字符串表示 ISO 8601 格式的给定日期 – YYYY-MM-DDTHH:mm:ss.sssZ
。
使用 toISOString
方法时,我们始终会根据通用时间获取日期。
toJSON()
方法在底层使用toISOString()
方法,因此两个代码片段是等价的,第二个更明确。
toISOString
方法根据通用时间返回结果,因此字符串显示的时间为 09:04:45,而 Date 对象的时间设置为 11:04:45。
这是因为我的时区比协调世界时 (UTC) 早 2 小时。
大多数情况下,在存储日期时,建议在数据库中存储时间戳或有效的 ISO 8601 字符串 (UTC)。
例如,如果我们将当地时间午夜 (00:00) 存储在数据库中,您将不知道这是东京(日本)、巴黎(法国)、纽约(美国)等的午夜。这些都是相隔数小时的不同时刻。
为了保持一致性,当我们必须向用户呈现日期和时间时,您应该主要使用本地时间,但将实际值存储在 UTC
(=GMT) 中。
在 JavaScript 中获取日期的 ISO 格式字符串非常容易。我们只需使用 toISOString()
方法。
console.log(new Date().toISOString());
使用 JSON.stringify
方法可以轻松地将字符串转换为 JSON,然后可以通过网络传输。
Date()
构造函数知道如何解析 ISO 8601 字符串,因此我们所要做的就是解析 JSON 并将 ISO 字符串传递给构造函数。
const json = JSON.stringify(new Date().toISOString());
console.log(json); // ?️ "2022-10-06T14:36:08.488Z"
const date = new Date(JSON.parse(json));
console.log(date); // ?️ Thur Oct 26 2022 14:36:08