このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
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 2015年7月.
toJSON() はDate インスタンスのメソッドで、この日時をtoISOString() と同じ ISO 形式で表す文字列を返します。
In this article
試してみましょう
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> |