2016-12-10 6 views
0

私は少し初心者ですので、私に同行してください。私は誰かが新しいページを開くたびに、javascriptで日付オブジェクトを作成しました。ユーザーがページを開いた時刻を保存し、ちょうど1日後に別の日付オブジェクトを作成して日付1から日付2までの経過時間を示すカウントダウンタイマーを作成します。Dateオブジェクトを静的に保ち、更新を避けるにはどうすればいいですか?

これを達成するために、 .getTime;私は、現在の時刻よりも1日ではなく、2番目の日付を静的に保ちたい。残念ながら、d2(日付2)を1回だけ実行され、変数nextdayに格納されている条件に限定しても、これは起こりません。ここに私のJSだ

$(function(){ 
localStorage.clear() 
var ran = JSON.parse(localStorage.getItem('run')) 
d1 = new Date() 
var i = 0 

if(!ran){ 
    i+=1 
    d2 = new Date(d1) 
    nextday = d2.setHours(d1.getHours()+24) 
    console.log(i) 
    console.log(typeof(nextday)) 
    localStorage.setItem('run',JSON.stringify('ran')) 
    localStorage.setItem('nextday',JSON.stringify(nextday)) 
} 
console.log(localStorage) 
nday = JSON.parse(localStorage.getItem('nextday')) 
console.log(nday) 
var seconds = (nday - d1.getTime()) 

console.log(seconds) 
console.log(localStorage) 
}) 
+0

オブジェクトを関数に変換します。あなたがそれを要求するたびに、あなたは同じデータを得るでしょう。 – Derek

+0

夏時間を観測する場所では、24時間を追加することで1日を追加しないでください.24時間でない2日が毎年あります。日付に1を加えて、[*現在の日付に+1を加える*](http://stackoverflow.com/questions/9989382/add-1-to-current-date/9989458#9989458)を参照してください。 – RobG

答えて

1

あなたのスクリプトは、ローカルストレージにページがロードされるたびにクリアされます。

localStorage.clear() 

これは、実行間で保存されているから何かを防ぐことができます。それを除く。

1

ローカルに保存されたデータにアクセスする前に、localStorageを消去しています。したがって、ran変数は常に空です。その1つのコールをclear()に削除すると、すべて正常に動作するはずです。

$(function() { 
    // localStorage.clear() <= the offending code! 
    var ran = JSON.parse(localStorage.getItem('run')) 
    d1 = new Date() 
    var i = 0 

    if (!ran) { 
    i += 1 
    d2 = new Date(d1) 
    nextday = d2.setHours(d1.getHours() + 24) 
    console.log(i) 
    console.log(typeof(nextday)) 
    localStorage.setItem('run', JSON.stringify('ran')) 
    localStorage.setItem('nextday', JSON.stringify(nextday)) 
    } 
    console.log(localStorage) 
    nday = JSON.parse(localStorage.getItem('nextday')) 
    console.log(nday) 
    var seconds = (nday - d1.getTime()) 

    console.log(seconds) 
    console.log(localStorage) 
})