試一試
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 |
瀏覽器相容性
載入中…