Date.prototype.toJSON()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

toJSON() 方法是 Date 例項的一個方法,它返回一個字串,該字串以與 toISOString() 相同的 ISO 格式表示此日期。

試一試

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

瀏覽器相容性

另見