http://www.cj-c.com/java_s/java15.htm
こんな感じのカウントダウンのスクリプトのアレンジで、何度も繰り返すものは作れないでしょうか?(秒以下の単位までのもので)
例えば、3日間のカウントダウンで、「あと2日23時間59分59秒59」からカウントダウンしていって、「あと0日00時間00分00秒01」になると、また「あと2日23時間59分59秒59」に戻り、延々と3日間のリピートが繰り返されるものです。
可能であれば、教えて頂きたいです。よろしくお願いします。
No.5ベストアンサー
- 回答日時:
<html>
<body>
<input type="text" id="a" size="40"><br>
<script>
setInterval("t()",10);// 1/100秒単位で呼び出し
function t(){
p=9*60*60*1000;//alert(new Date(0).getTime())はAM9:00からだったから
t0=24*60*60*1000;//1日の単位
t1=(new Date()).getTime()+p;//1970 AM0:00からの秒数
t2=INT(t1/t0);//1970年から何日目かを求める
t3=t2%3;//3日で割り余りの日(追加分)を求める
t4=(t2+t3)*t0;//今日から3日単位の余りの日数を加算し、予定日の秒数を計算
t5=t4-t1;//予定時間から現在の時間を引いて、あと何秒かを計算
ms=INT(t5%1000/10);
ss=INT(t5/1000)%60;
mi=INT(t5/60000)%60;
hh=INT(t5/3600000)%24;
dd=INT(t5/t0);
document.getElementById('a').value='あと '+((dd)?dd+'日と ':'')+num0(hh,2)+"時"+num0(mi,2)+"分"+ss+"."+num0(ms,2)+"秒";
t5-=10; if(t5<0) t5=t0*3;
}
function INT(n){ return Math.floor(n) }
function num0( num, p ){ var s = '00'+ num; return s.substr( s.length-p,p); }
</script>
</body>
</html>
時間があってながめてました。複数起動していると誤差が増大していきます。正確に時を刻めないようでした。なのですべての計算を関数の中に移しました。
時間の表示もちょっとだけ細工しました。
No.4
- 回答日時:
<html>
<body>
<input type="text" id="a"><br>
<script>
p=9*60*60*1000;//alert(new Date(0).getTime())はAM9:00からだったから
t0=24*60*60*1000;//1日の単位
t1=(new Date()).getTime()+p;//1970 AM0:00からの秒数
t2=INT(t1/t0);//1970年から何日目かを求める
t3=t2%3;//3日で割り余りの日(追加分)を求める
t4=(t2+t3)*t0;//今日から3日単位の余りの日数を加算し、予定日の秒数を計算
t5=t4-t1;//予定時間から現在の時間を引いて、あと何秒かを計算
setInterval("t()",10);// 1/100秒単位で呼び出し
function t(){
ms=INT(t5%1000/10);//マイクロ秒?
ss=INT(t5/1000)%60;//秒
mi=INT(t5/60000)%60;//分
hh=INT(t5/3600000)%24;//時
dd=INT(t5/t0);//日数
document.getElementById('a').value=dd+'日 '+hh+":"+mi+":"+ss+"."+ms;
t5-=10; if(t5<0) t5=t0*3;//3日分カウンタ追加
}
function INT(n){ return Math.floor(n) }
</script>
</body>
</html>
9時間の誤差が判明したので修正。
>ページを更新する度に、あと3日に戻ってしまうようです
ですが、このプログラムは、1970年からの日数を計算して
3で割り余りを求めて、そこから秒数を計算しています
つまりページを更新した時を基準にしてはいません。
なにかの考え違いではないでしょうか?
3日も眺めているわけにはいかないので確認はできませんが、
多分3日置きに更新されると思います。
時間の更新のために1秒間に100回もの割り込み処理が発生します
何かの重い処理をされたときに、長時間に渡り正確に時をきざめるかは微妙です
とりあえず各行に処理内容を書いときました
プログラムは行数も少ないし理解しやすいと思います
ページの更新時と関係ないことがわかると思います
No.3
- 回答日時:
<html>
<body>
<input type="text" id="a">
<script>
t0=24*60*60*1000; t1=(new Date()).getTime(); t2=INT(t1/t0);
t3=t2%3;t4=(t2+t3+1)*t0;t5=t4-t1-9*60*60*1000;
setInterval("t()",10);
function t(){
ms=INT(t5%1000/10);ss=INT(t5/1000)%60;mi=INT(t5/60000)%60;hh=INT(t5/3600000)%24;dd=INT(t5/t0);
document.getElementById('a').value=dd+'日 '+hh+":"+mi+":"+ss+"."+ms;
t5-=10; if(t5<0) t5=t0*3;
}
function INT(n){ return Math.floor(n) }
</script>
</body>
</html>
9時間の誤差の理由を考えてたら時間がなくなってしまった!
お願いばかりせず考えてみてね^^;!
まったく知識がないもので、申し訳ございません。
お時間かけて頂き、ありがとうございました。
(1番目の方と同じく、ページを更新する度に、あと3日に戻ってしまうようです)
No.2
- 回答日時:
こんにちは
<script type="text/javascript"><!--
base = new Date(2008,2,30);
window.onload=function() { display(); }
function display() {
today = new Date();
day = 2 - Math.floor(((today-base)/(24*60*60*1000))%3);
hour = 23 - Math.floor(((today-base)%(24*60*60*1000))/(60*60*1000)) ;
minute = 59 - Math.floor(((today-base)%(24*60*60*1000))/(60*1000))%60 ;
second = 60 - Math.floor(((today-base)%(24*60*60*1000))/1000)%60%60 ;
if(second == 60) { minute += 1; second = 0; }
if(minute == 60) { hour += 1; minute = 0; }
if(hour == 24) { day += 1; hour = 0; }
if(hour < 10) hour = "0" + hour;
if(minute < 10) minute = "0" + minute;
if(second < 10) second = "0" + second;
document.getElementById("count").value = "残り" + day + "日と" + hour + "時間" + minute + "分" + second + "秒";
setTimeout("display()",1000);
}
//--></script>
<input type="text" id="count" size="30" readonly>
※base = new Date(2008,2,30);が基準(スタート)日です(2008.3.30)
※00時から23時に変わる瞬間、0日から2日に変わる瞬間は未確認ですので確認して違っていれば微調整をしてください
ありがとうございます!
これでテストしてみたいと思います。
本当に感謝します。
ただ、できれば、これで100分の1秒まで表示できればありがたいのですが・・・
(専門知識がないために、大変申し訳ございません)
No.1
- 回答日時:
以下のコードを参考にしてみてください。
------------------------------------------------------------
<html>
<head>
<title>TAG index Webサイト</title>
<script type="text/javascript">
<!--
var days = 3;
var sec = 10;
var dat1 = 24*60*60*1000;
var millenium;
function setLastDay() {
millenium = new Date();
millenium.setDate(millenium.getDate()+days);
}
function setLastMinute() {
millenium = new Date();
millenium.setSeconds(millenium.getSeconds()+sec);
}
function display() {
var today = new Date()
if ( !millenium || (millenium < today) ) setLastDay();
//if ( !millenium || (millenium < today) ) setLastMinute();
var days = Math.floor((millenium-today)/dat1);
var milliSec = (millenium-today)%dat1;
time1 = Math.floor(milliSec/(60*60*1000));
time2 = Math.floor(milliSec/(60*1000))%60;
time3 = Math.floor(milliSec/1000)%60%60;
document.f.days.value = "ドラえもん誕生まで、あと "+days+"日"+time1+"時間"+time2+"分"+time3+"秒";
tid = setTimeout('display()', 1000);
}
// -->
</script>
</head>
<body bgcolor="#ffffff" link="#ff0000" vlink="#0000ff"
onload="display()" onunload="clearTimeout(tid)"><br>
<form name="f" action="">
<input type="TEXT" name="days" size="53">
</form>
</body>
</html>
------------------------------------------------------------
動きを確かめるために、次のコメントを入れ替えてみてください。
if ( !millenium || (millenium < today) ) setLastDay();
//if ( !millenium || (millenium < today) ) setLastMinute();
setLastMinute()の方は、10秒間隔で動きます。
この回答への補足
ありがとうございます。早速のご回答、感謝します。
ただ、すみませんが、ちょっと求めているものとは違っています。
これは、ページを開く度に「あと3日」に戻ってしまうようです。
そうではなくて、例えば、3/30の時点で「あと3日」だったら、普通にカウントダウンしていくと、4/2で「0」になります。その時点で、また「あと3日」のカウントダウンが始まる・・・
つまり、この例でいくと、4/2、4/5、4/8、4/11・・・が期限の日になるようなものです。
(あと、一応、1/100秒の単位のものが希望なのですが)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで今日の日付から3日後を表示させ、3日後にその日から3日後を表示させたい 2 2022/11/30 17:38
- その他(社会・学校・職場) 5月5日までに提出して下さい。 これは、5月5日の23時59分59秒までなら大丈夫。 と解釈したつも 5 2022/06/08 18:13
- Excel(エクセル) Excel について <TIMEVALUE> 3 2022/10/20 15:57
- 法学 条約の失効日は、何時何分に明確に失効となりますか? 日ソ中立条約 2 2022/05/22 13:40
- 新年・正月・大晦日 中国のカウントダウンに興味があります。 横浜中華街の旧正月カウントダウンは本当にカウントダウンだけで 2 2023/01/21 22:14
- ウォーキング・ランニング ジョギング 2 2022/11/05 09:47
- Excel(エクセル) エクセルで日別シフト表を作る(セルに色を付ける) 3 2022/10/15 14:17
- 会社・職場 職場のパートで本当性格が悪い人がいます。私の職場はパートが帰る時間にはチャイムが鳴りません。自分の机 7 2023/08/17 17:39
- スピーカー・コンポ・ステレオ cueシートのpregapについて 1 2023/05/13 19:59
- その他(教育・科学・学問) 1600メートルリレーで日本人が2分59秒だったようですが、計算してみたところ、 1600÷179= 5 2022/07/25 19:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォーカス移動抑止について
-
iframeの中から親ページをスム...
-
JavaScript でキーを送る
-
getElementsByNameで要素が取得...
-
キーを押している間の時間を計...
-
function の return 値を表示し...
-
JavaScriptでのEnterキーとAlt+...
-
マウスオーバーで文字にアンダ...
-
ボタンを押してテキストエリア...
-
JavaScriptでiframeの内容を「...
-
<a href="#" …>の意味を教えて...
-
bodyにidをつける理由は何ですか?
-
SQLのWHEREで全てを質問する方法
-
テーブル内の数値を自動で計算...
-
javascriptとApacheの設定
-
テキストをクリックすると答え...
-
javascriptでalertの文字列をコ...
-
cssにjavascriptを入れる?呼び...
-
Jquery.PHPファイルのechoが表...
-
onbeforeunload時のwindow.open...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
getElementsByNameで要素が取得...
-
SCRIPT5007: 未定義または NULL...
-
初心者javascript ウィンドウサ...
-
function の return 値を表示し...
-
JavaScriptでiframeの内容を「...
-
JavaScript でキーを送る
-
フォーカス移動抑止について
-
iframeの中から親ページをスム...
-
html javascript 作った配列を...
-
ボタンのID名を取得するには?
-
キーを押している間の時間を計...
-
自動ジャンプでフォームデータ...
-
bodyタグのfocus
-
リンク移動先のURLを取得
-
チェックボックスの選択パター...
-
JavaScriptでの西暦下2桁での表...
-
htaでVBSのソースを書いたらエ...
-
乱数を一定時間毎に表示させた...
-
「オブジェクトを指定してくだ...
-
jQuery ツールチップの中のリンク
おすすめ情報