ブラウザが提供するJSON.parse関数がDateオブジェクトに逆シリアル化する日付形式はありますか?
いいえ。規格には日付に関するものはありません。
しかし、Date
オブジェクトには、JSON日付シリアル化の事実上toJSON
の標準を定義する特定の関数が含まれるようになりました。に基づいています。EcmaScriptを参照してください。toISOString
また、MSDNには、 Datesを取り戻すために標準のJSON.parse関数のリバイバーを構築する方法に関するドキュメントがあります。
エキス :
var jsontext = '{ "hiredate": "2008-01-01T12:00:00Z", "birthdate": "2008-12-25T12:00:00Z" }';
var dates = JSON.parse(jsontext, dateReviver);
document.write(dates.birthdate.toUTCString());
function dateReviver(key, value) {
var a;
if (typeof value === 'string') {
a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
if (a) {
return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+a[5], +a[6]));
}
}
return value;
};
// Output:
// Thu, 25 Dec 2008 12:00:00 UTC
これは、正確には「正規表現と、残りのJSONを逆シリアル化した後に日付を解析するための醜いコードの束」ではありません。、むしろRegExpと、逆シリアル化中に日付を解析するための醜いが再利用可能なコードの合理的な束...
欠点は、シリアル化された日付と同じ日付と文字列を区別できないことです。そのため、JSON形式があいまいになります。そのため、JSON.parse
これらの日付を通常どおり逆シリアル化することに挑戦しないのはおそらくそのためです。