前提・実現したいこと
viewでstartボタンを押すとlocalstorageに時間が保存されtimer関数が呼ばれます。setTimeoutで一秒ごとにtimer関数を呼び続けるのでconsole.log(elapsed);によりconsoleには1,2,3…と表示され続けます。
その経過時間から経過年数を出すために経過秒数から31536000(一年の秒数)を割ることによって値を出します。
解決したいことはstartボタンを押しconsole.log(year);の出力を確認するとstartボタンを押してから最初に3,6,9と3の倍数が表示され9の後には1,1,1,2,2,2,3,3,3…と数値がで続けます。本来ならstartボタンを押すと最初から0,0,0,0と表示されなければいけないにも関わらずおかしな値が出てしまうことを解決したいです。
timer.js
javascript
1function timer() { 2 3 now = new Date(); 4 5 // 経過時間(秒) 6 elapsed = parseInt((now.getTime() - localStorage.getItem("time")) / 1000); 7 console.log(elapsed); 8 year = parseInt(elapsed / 31536000); 9 console.log(year); 10 11 if (localStorage.getItem("time")) { 12 var id = setTimeout("repetition()", 1000); 13 } 14 15}
試したこと
数値(31536000)が大きすぎて正確な値が出なかったのかなと考えたので31536で割るとうまく計算されstartボタンを押して以来0がずっと出力されました。
またyearの箇所をいきなり秒数で書くのではなく一年の秒数の計算式でyear = parseInt(elapsed / 365 * 24 * 60 * 60);のように書き直すと次は大きな値(1000以上)が不規則に出力されました。
原因が全くわからなかったのでもし解決策があればご教示願いたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/03 12:37
2019/12/03 18:37