- ベストアンサー
カウントダウンタイマー
カウントダウンタイマーをJavascriptでもって設置したのですが表示される度に定時からスタートする場合はどうやればよいのでしょうか?つまり仮に4月1日を締め切りにしてそれをすぎたら終了ではなく、常に後3日までや5日までのカウントダウンをしたいのです。言葉足らずな初心者で申し訳ないのですがよろしくお願い致します。以下現在使用のscriptです。 <SCRIPT language=JavaScript> <!-- millenium = new Date(2007,3,31,23,59,00) function display() { today = new Date() myMsec= millenium.getTime()-today.getTime(); time0 = Math.floor(myMsec/(1000*60*60*24));// カウントダウン用'日' 取得 myMsec -= (time0*(1000*60*60*24)); // 経過秒から'時'を引く time1 = Math.floor(myMsec/(1000*60*60));// カウントダウン用 '時' 取得 myMsec -= (time1*(1000*60*60)); // 経過秒から'時'を引く time2 = Math.floor(myMsec/(1000*60)); // カウントダウン用 '分' 取得 myMsec -= (time2*(1000*60));// 経過秒から'分'を引く time3 = Math.floor(myMsec/1000);// カウントダウン用 '秒' 取得 myMsec -= (time3*(1000)); // 経過秒から'秒'を引く time4 = Math.floor(myMsec/10);// カウントダウン用 '少数秒' 取得 for(i=0;i<2;i++){ time2 = '' + '0' + time2; } for(i=0;i<2;i++){ time3 = '' + '0' + time3; } for(i=0;i<2;i++){ time4 = '' + '0' + time4; } time2 = time2.substring(time2.length - 2,time2.length); time3 = time3.substring(time3.length - 2,time3.length); time4 = time4.substring(time4.length - 2,time4.length); time0 = time0 - 31; if((millenium - today) > 0){ document.f.days.value = "締め切りまで"+time0+"日と"+time1+":"+time2+":"+time3+"."+time4+"です" }else{ document.f.days.value = "受け付けは終了しました" } tid = setTimeout('display()', 10) } display() // --> </SCRIPT>
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
そもそも, 最初のこれ↓がおかしくないですか? millenium = new Date(2007,3,31,23,59,00) おそらく,今日(2007/3/31)の23時59分にしたいのだと思うので, こうなると思いますよ↓。 millenium = new Date(2007,2,31,23,59,00) 月は 0 から始まります。 1月は0の月,2月は1の月,…,12月は11の月です。 ですから, 今日(2007/3/31)の23時59分は,2007,2,31,23,59,00 です。 2007,3,31,23,59,00 というような変なことを書いて, 辻褄を合わせようとするので, time0 = time0 - 31; というさらに変なものを登場させざるを得なくなって, 締め切りが過ぎても,「受け付けは終了しました」が表示されずに, 締め切りまで-25日と6:25:20.00です のようなマイナスの日時が表示されてしまうのだと思います。 ついでに, time0 = time0 - 31; で, なんとか締め切りの1秒前までは誤魔化せるのも 31 日まである月だけです。 ~~~~~~~~~~~~~~~~~~ そういうことを踏まえた上で,本題です。 > 常に後3日までや5日までのカウントダウンをしたいのです。 ★を付けた部分を,付け加えもしくは修正しています。 ------------------------------------ <SCRIPT language=JavaScript> <!-- today = new Date();// ★今の時刻オブジェクトを作成 d = today.getTime() + 10000*60*60*24*3;// ★3日分のミリ秒を加算 millenium = new Date(d);// ★締め切り時刻の時刻オブジェクトを作成 function display() { today = new Date(); myMsec= millenium.getTime()-today.getTime(); time0 = Math.floor(myMsec/(1000*60*60*24));// カウントダウン用'日' 取得 myMsec -= (time0*(1000*60*60*24)); // 経過秒から'時'を引く time1 = Math.floor(myMsec/(1000*60*60));// カウントダウン用 '時' 取得 myMsec -= (time1*(1000*60*60)); // 経過秒から'時'を引く time2 = Math.floor(myMsec/(1000*60)); // カウントダウン用 '分' 取得 myMsec -= (time2*(1000*60));// 経過秒から'分'を引く time3 = Math.floor(myMsec/1000);// カウントダウン用 '秒' 取得 myMsec -= (time3*(1000)); // 経過秒から'秒'を引く time4 = Math.floor(myMsec/10);// カウントダウン用 '少数秒' 取得 for(i=0;i<2;i++){ time2 = '' + '0' + time2; } for(i=0;i<2;i++){ time3 = '' + '0' + time3; } for(i=0;i<2;i++){ time4 = '' + '0' + time4; } time2 = time2.substring(time2.length - 2,time2.length); time3 = time3.substring(time3.length - 2,time3.length); time4 = time4.substring(time4.length - 2,time4.length); // ★これ不要↓ // time0 = time0 - 31; if((millenium - today) > 0){ document.f.days.value = "締め切りまで"+time0+"日と"+time1+":"+time2+":"+time3+"."+time4+"です"; }else{ document.f.days.value = "受け付けは終了しました"; } tid = setTimeout('display()', 10); } display(); // --> </SCRIPT> ------------------------------------
その他の回答 (2)
- luka3
- ベストアンサー率72% (424/583)
すみませんでした。 millenium = new Date(new Date().getTime()+1000*60*60*24*3); こうですね。あとはNo.2さんのとおり、 time0 = time0 - 31; が不要です。
お礼
luka3さんもありがとうございました! これでばっちり作動します^^ ほんとにありがとうございました!
- luka3
- ベストアンサー率72% (424/583)
millenium = new Date(2007,3,31,23,59,00) ↑この行を↓のように変更してください。 millenium = today.getTime()+1000*60*60*24*3; もし5日後なら最後を5にしてください。
補足
ありがとうございます! やってみました・・・が、出来ませんでした(涙 カウンター自体が表示されなくなってしまいました。 なんででしょう?お分かりになりましたら教えて頂けると幸いですm(__)m
お礼
非常に詳細な回答ありがとうございました! 見事に解決しました!感謝いたします!