3

Json.NETを使用して一部のデータをシリアル化しています。日付のシリアル化方法に非常に柔軟性があるため、必要な形式で出力できます。

ブラウザが提供する関数がオブジェクトJSON.parseに逆シリアル化する日付形式はありますか?Dateそうでない場合は、JSONを日付を含むJavaScriptオブジェクトに逆シリアル化する優れたライブラリを知っている人はいますか?

RegExpJSONの残りの部分を逆シリアル化した後、日付を解析するために、たくさんの醜いコードを使用する必要は本当にありません。すべてを実行する単一の関数呼び出しが必要です。

4

2 に答える 2

5

ブラウザが提供する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これらの日付を通常どおり逆シリアル化することに挑戦しないのはおそらくそのためです。

于 2013-02-27T19:15:47.187 に答える
0

どうして var d = new Date(Date.parse(utcDateString));

于 2015-01-24T10:20:10.863 に答える