Date.prototype.toJSON()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

toJSON()Date インスタンスのメソッドで、この日時を toISOString() と同じ ISO 形式で表す文字列を返します。

試してみましょう

const event = new Date("August 19, 1975 23:15:30 UTC");

const jsonDate = event.toJSON();

console.log(jsonDate);
// 予想される結果: "1975-08-19T23:15:30.000Z"

console.log(new Date(jsonDate).toUTCString());
// 予想される結果: "Tue, 19 Aug 1975 23:15:30 GMT"

構文

js
toJSON()

引数

なし。

返値

協定世界時に基づき、指定された日付を日時文字列形式で表す文字列。または、日付が無効である場合は null です。有効な日時である場合、返値は toISOString() と同じ ISO 形式です。

解説

toJSON() メソッドは、 Date オブジェクトが文字列化されると、JSON.stringify() によって自動的に呼び出されます。このメソッドは、通常、 JSON シリアライズ中に Date オブジェクトをシリアライズするために使用することを意図しており、 Date() コンストラクターを使用して JSON.parse() の復元関数としてシリアライズ解除することができます。

このメソッドは、プリミティブ値に変換するために、まず、その this 値を [Symbol.toPrimitive]() (ヒントとして "number" を使用)、valueOf()toString() の各メソッドをこの順で呼び出します。結果が有限数でない場合は、 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);

// ネットワーク経由での送信をイメージ

const data = JSON.parse(response, (key, value) => {
  if (key === "createdAt" || key === "updatedAt") {
    return new Date(value);
  }
  return value;
});

console.log(data);

メモ: JSON.parse() の復元関数は、期待する内容の形状に仕様上一致している必要があります。これは、シリアライズは不可逆であるため、 Date を表す文字列と通常の文字列を判別することが不可能だからです。

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-date.prototype.tojson

ブラウザーの互換性

関連情報