質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

3回答

3210閲覧

javascriptのカウントダウンタイマーの記述について質問です。

jkita1456

総合スコア10

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2016/11/01 23:30

下記のカウントダウンタイマーのscriptで質問したいことがあります。
endDateTimeのDateを常に当日の22:00にする場合、どのように記述すればよいでしょうか。

また、下記のscriptは指定の時刻を過ぎてもカウントダウンが終了しないようになっているのですが、時刻を過ぎたら'終了'というテキストを表示させたいです。

どなたかご教示いただけますと幸いです

<script type="text/javascript"> $(function() { countDown(); }); function countDown() { var startDateTime = new Date(); var endDateTime = new Date("January 01,2014 22:00:00"); var left = endDateTime - startDateTime; var a_day = 24 * 60 * 60 * 1000; // 期限から現在までの『残時間の日の部分』 var d = Math.floor(left / a_day) // 期限から現在までの『残時間の時間の部分』 var h = Math.floor((left % a_day) / (60 * 60 * 1000)) // 残時間を秒で割って残分数を出す。 // 残分数を60で割ることで、残時間の「時」の余りとして、『残時間の分の部分』を出す var m = Math.floor((left % a_day) / (60 * 1000)) % 60 // 残時間をミリ秒で割って、残秒数を出す。 // 残秒数を60で割った余りとして、「秒」の余りとしての残「ミリ秒」を出す。 // 更にそれを60で割った余りとして、「分」で割った余りとしての『残時間の秒の部分』を出す var s = Math.floor((left % a_day) / 1000) % 60 % 60 $("#TimeLeft").text(d + '日' + h + '時間' + m + '分' + s + '秒'); setTimeout('countDown()', 1000); } </script> <div class="Timer"> <p>カウントダウン終了まで</p> <div id="TimeLeft"></div> </div>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Date.prototype.setHours

Date.prototype.setHours を使ってみてはどうでしょうか。

HTML

1<div class="Timer"> 2 <p>カウントダウン終了まで</p> 3 <div id="TimeLeft"></div> 4</div> 5<script> 6'use strict'; 7setTimeout(function countdown (element) { 8 var endTime = new Date, 9 now = new Date, 10 floor = Math.floor, 11 diffTime; 12 13 endTime.setHours(22, 0, 0); 14 diffTime = endTime - now; 15 16 if (diffTime > 0) { 17 element.textContent = floor(diffTime / 3600000) + '時間' + floor((diffTime % 3600000) / 60000) + '分' + floor((diffTime % 60000) / 1000) + '秒'; 18 console.log(now); 19 console.log(element.textContent); 20 setTimeout(countdown, 1000, element); 21 } else { 22 element.textContent = '終了'; 23 } 24}, 1000, document.getElementById('TimeLeft')); 25</script>

22:00 を過ぎたら終了

時刻を過ぎたら'終了'というテキストを表示させたいです。

こちらはタイマー起動時の判定処理で考え方が2通りあります。

  • 23:00にタイマーを始動した場合、既に22:00を過ぎているので「終了」を出力する
  • 23:00にタイマーを始動した場合、翌日の22:00はまだ過ぎてないので翌日の22:00を目指してカウントダウンを開始する

私が書いたコードは前者です。

Re: jkita1456 さん

投稿2016/11/02 03:49

編集2016/11/02 05:04
think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2016/11/02 05:06

To: kei344 さん ご指摘ありがとうございます。 仰る通りでしたので修正しました。「穴があったら入りたい」とはこの事ですね…。 '終了' の出力条件も甘かったのでコードも修正しておきました。
guest

0

Dateを常に当日の22:00にする場合

startDateTimeに現在時刻の通算ミリ秒が入るので、これを【今日のhh時】にしたい場合のシンプルな方法では1日の通算ミリ秒(86400000)で丸めてからhh時刻までのミリ秒(hh x 360000)を足すという計算をしてあげます

javascript

1var endDateTime = Math.floor(startDateTime/86400000)*86400000+(22*360000)

時刻を過ぎたら'終了'というテキストを表示

leftに時刻の比較結果が入っているので「過ぎていればメッセージ表示して終了する」という処理を入れてあげます

javascript

1・・・ 2if( left < 0 ){ // ぴったりの時刻を含めたければ <= にする 3 //終了メッセージ表示 4 return; 5} 6setTimeout('countDown()', 1000);

投稿2016/11/02 01:25

takito

総合スコア3111

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

javascript

1$("#TimeLeft").text(d + '日' + h + '時間' + m + '分' + s + '秒');

の前に if で left が正の数である事を確認して場合分けするとよいと思います。

投稿2016/11/01 23:35

hana-da

総合スコア1728

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問