46

JavaScript を使用して 2 つの時間の差を計算しようとしています。それは単なる基本的な数学ですが、 and を使用しているときに問題があるようJSON.stringify()ですJSON.parse()

なぜJSON.stringify()日付に関数を適用するのか疑問に思われる場合は、ローカル ストレージを使用してクライアント側にデータを保存し、クライアントが再び Web サイトにアクセスするたびにそれを使用するためです (より多くの要求を行うよりも、その方が高速です)。サーバーへ)。そのデータは通常、時々更新されるため (別の Web サイトから API を介してデータを取得しています)、data_update変数を設定し、他のデータと一緒に保存しています。

data_updateそのようにして、ローカルストレージから保存されたデータを取得し、 (日付/時刻)とチェックが行われた時刻/日付の違いを確認し、それが週/日/etcよりも大きいかどうかを確認します.

これが、JSON 関数を使用している理由です。Date()私の問題は、ローカル ストレージからデータを解析しているときに、日付がオブジェクトと異なるように見えることです。

次の操作を実行しようとしています:

var x = JSON.parse(JSON.stringify(new Date()));

var y = JSON.parse(this.get_local_storage_data(this.data_cache_key)); // the data object stored on local storage

var q = y.data_update; // this is the variable where the Date() was stored

console.log(Math.floor((x-q)/1000));

上記は を返しnullます。Math.floor(x)また、結果を見たいときはまた戻ってきますnull

では、この状況で何ができますか?これに対する修正はありますか?

4

3 に答える 3

64

Date の JSON.stringify の出力を見ると、次のことがわかります。

JSON.stringify(new Date())

結果は文字列になります。JSON には、 JSON.parse が自動的に Date オブジェクトに戻す Date オブジェクトのプリミティブな表現がありません。

Date オブジェクトのコンストラクターは日付文字列を受け取ることができるため、次のようにしてこれらの文字列値を日付に戻すことができます。

var x = new Date(JSON.parse(JSON.stringify(new Date())));

その後、算数が機能します。

x = new Date(JSON.parse(JSON.stringify(new Date())))
y = new Date(JSON.parse(JSON.stringify(new Date())))
y - x
=> 982
于 2012-07-15T12:42:18.053 に答える