19

日付をlocalStorageに保存する必要があり、ページが更新されたときに、それからどれくらいの時間が経過したかを計算したいと思います。

ここで問題があります。localStorageは日付を文字列として保存するため、localStorageに保存された後、これら2つの日付の差を計算しようとするとNaNが返されます。

javascriptコンソールでこれを試してください:

var a = new Date();
var b = new Date();
console.log(b - a); //this works
localStorage.a = a;
localStorage.b = b;
console.log(localStorage.b - localStorage.a); //this doesn't work

また、日付オブジェクトをそのまま維持しようJSON.stringifyJSON.parseしましたが、それも機能しません。

私の推測では、localStorageの日付を解析する必要があります。より良い方法がない場合、どうすればそれを行うことができますか?

4

7 に答える 7

50

デモ: http: //jsfiddle.net/AuhtS/

コード:

var a = new Date();
var b = new Date();
console.log(b - a); //this works
localStorage.a = a;
localStorage.b = b;
a = Date.parse(localStorage.a); // parse to date object
b = Date.parse(localStorage.b);
console.log(b - a); // now, this will work

理由

すべてが文字列として。に格納されますlocalStorage

したがって、そうするときlocalStorage.b - localStorage.a、あなたが試みているのは、ある文字列を別の文字列から減算しようとしていることです。それが機能しない理由です。

于 2012-09-30T12:39:32.630 に答える
9

localStorageに日付を保存するには、次のようにします。

localStorage['key'] = ''+myDate.getTime();

そしてそれを復元するには:

var myDate = new Date(parseInt(localStorage['key'], 10));

(以前に定義されたものをテストすることもできます)

また、期間(日付から別の日付を引いたもの)でも機能します。値をlong(ミリ秒)として使用し、文字列との間で変換します。

JSONには標準化された日付形式が含まれていないことに注意してください。日付にJSONを使用しないでください。

于 2012-09-30T12:42:52.367 に答える
1

私はこれを使用します:

var d1 = new Date();
localStorage.setItem("key", d1.getTime());
var d2 = new Date(parseInt(localStorage.getItem[key]));

不足しているのは、適切なnull検証だけです。

于 2018-04-16T20:23:27.770 に答える
0

あなたは単に行くことができます:

var date1 = <date1>
var date2 = <date2>
localStorage.setItem('date1', date1.toString())
localStorage.setItem('date2', date2.toString())

var date1 = new Date(localStorage.getItem('date1'))
var date2 = new Date(localStorage.getItem('date2'))
var diff = date1 - date2
于 2016-10-22T19:46:55.570 に答える
0

私の場合、Dateタイプで必要です。したがって、ここにあります:

var a = new Date();
localStorage.a = a;
var c = new Date(localStorage.a);
于 2019-03-27T12:38:25.297 に答える
-1
localStorage.setItem("date", new Date().toString()); 

このように直接追加できます

于 2021-01-02T07:18:07.993 に答える
-4

localStorageはタイムスタンプのみを取ると思います。私が間違っている場合は私を訂正してください。JSに組み込まれているDateライブラリの代わりにmomentライブラリを使用することをお勧めします。モーメントははるかに使いやすく、いくつかの便利な組み込み関数があります。1つはtoString()で、データを文字列として解析できます。例は次のとおりです。

// create a moment (the current time)
const now = moment()
// convert it to a timestamp to store it in localStorage
now.valueOf()
// get the data back in string format
now.toString()

Momentには便利な.fromNow()メソッドもあります。このメソッドを使用すると、作成された日付から編集された瞬間までの時間差を取得できます。これがお役に立てば幸いです。詳細については、ドキュメントをしばらく読んでください:https ://momentjs.com/docs/

于 2021-04-28T22:39:56.370 に答える