试一试
const event = new Date("August 19, 1975 23:15:30 UTC");
const jsonDate = event.toJSON();
console.log(jsonDate);
// Expected output: "1975-08-19T23:15:30.000Z"
console.log(new Date(jsonDate).toUTCString());
// Expected output: "Tue, 19 Aug 1975 23:15:30 GMT"
语法
js
toJSON()
参数
无。
返回值
根据通用时间,返回一个表示给定日期的 日期时间字符串格式 的字符串,或者当日期 无效 时返回 null。对于有效日期,返回值与 toISOString() 的返回值相同。
描述
当 Date 对象被字符串化时,JSON.stringify() 会自动调用 toJSON() 方法。此方法通常旨在默认有用地序列化 Date 对象,以便在 JSON 序列化期间,可以使用 Date() 构造函数作为 JSON.parse() 的 reviver 来反序列化它们。
该方法首先尝试通过按顺序调用其 [Symbol.toPrimitive]()(使用 `"number"` 作为提示)、valueOf() 和 toString() 方法,将 this 值 转换为原始值。如果结果是 非有限 数字,则返回 null。(这通常对应于无效日期,其 valueOf() 返回 NaN。)否则,如果转换后的原始值不是数字或是一个有限数字,则返回 this.toISOString() 的返回值。
请注意,该方法不检查 this 值是否为有效的 Date 对象。但是,在非 Date 对象上调用 Date.prototype.toJSON() 会失败,除非该对象的数字原始表示形式为 NaN,或者该对象也具有 toISOString() 方法。
示例
使用 toJSON()
js
const jsonDate = new Date(0).toJSON(); // '1970-01-01T00:00:00.000Z'
const backToDate = new Date(jsonDate);
console.log(jsonDate); // 1970-01-01T00:00:00.000Z
序列化往返
在解析包含日期字符串的 JSON 时,可以使用 Date() 构造函数将它们还原为原始日期对象。
js
const fileData = {
author: "Maria",
title: "Date.prototype.toJSON()",
createdAt: new Date(2019, 3, 15),
updatedAt: new Date(2020, 6, 26),
};
const response = JSON.stringify(fileData);
// Imagine transmission through network
const data = JSON.parse(response, (key, value) => {
if (key === "createdAt" || key === "updatedAt") {
return new Date(value);
}
return value;
});
console.log(data);
注意: JSON.parse() 的 reviver 必须针对您期望的有效负载形状进行指定,因为序列化是不可逆的:无法区分表示日期的字符串和普通字符串。
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-date.prototype.tojson |
浏览器兼容性
加载中…