アプリ版:「スタンプのみでお礼する」機能のリリースについて

カウントダウンタイマーを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>

A 回答 (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>
------------------------------------
    • good
    • 0
この回答へのお礼

非常に詳細な回答ありがとうございました!
見事に解決しました!感謝いたします!

お礼日時:2007/03/31 20:05

すみませんでした。


millenium = new Date(new Date().getTime()+1000*60*60*24*3);
こうですね。あとはNo.2さんのとおり、
time0 = time0 - 31;
が不要です。
    • good
    • 0
この回答へのお礼

luka3さんもありがとうございました!
これでばっちり作動します^^
ほんとにありがとうございました!

お礼日時:2007/03/31 20:06

millenium = new Date(2007,3,31,23,59,00)


↑この行を↓のように変更してください。
millenium = today.getTime()+1000*60*60*24*3;
もし5日後なら最後を5にしてください。

この回答への補足

ありがとうございます!
やってみました・・・が、出来ませんでした(涙
カウンター自体が表示されなくなってしまいました。
なんででしょう?お分かりになりましたら教えて頂けると幸いですm(__)m

補足日時:2007/03/31 18:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!