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"
構文
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() を使う
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()
コンストラクターを使用して、それらを元の日時オブジェクトに復元することができます。
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 |