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

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

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

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

Q&A

解決済

2回答

5920閲覧

JSで指定日にリロード

yksg_09315

総合スコア20

JavaScript

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

0グッド

0クリップ

投稿2018/11/15 13:17

編集2018/11/15 13:56

JavaScriptで、指定した日と時間で自動的にリロード

JavaScriptで、指定した日と時間で自動的にリロードをするようなものを作っています。
12月25日の12時になったら自動的にリロードされる、というようなものです

調べながら以下のように組み、指定の時間でリロードさせる事は成功しました。
今はifで差が0以下の場合1日をプラスしているのですが、
本当は日の指定をして、指定した日の指定した時間にリロードさせたいです。
どう書き込めばよいのでしょうか。

最近JavaScriptを学び始めたばかりで行き詰ってしまいました…
教えていただけますと幸いです。

<script type="text/javascript"> function myfunc(h, m){ var goTo = function(){ location.reload() }; var now = new Date(); var current = (now.getHours()*60 + now.getMinutes())*60 + now.getSeconds(); var tage = (h*60+ m)*60 var jisa = tage - current if( jisa < 0 )jisa += 24*60*60; return setTimeout(goTo, jisa*1000); } myfunc(12,00); </script>

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

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

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

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

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

m.ts10806

2018/11/15 13:21

目的は何でしょうか?例えばその日限定のデザインや文言を反映したいとかそういった用途でしょうか。
yksg_09315

2018/11/15 13:49

はい、仰るとおりです。別のJSでその日限定の要素を出し分けしているのですが、リロードをしないと反映されない為、自動リロードを設置したいのです
m.ts10806

2018/11/15 13:53

1つの案として変わる部分だけを書き換えるというのがありますが、リロードでないといけないという理由があるということでよろしいですか?あと提示のJavaScriptコードはSyntaxErrorが出ているので修正いただいたほうが良いかと思います
yksg_09315

2018/11/15 14:17

申し訳ありません。大変失礼致しました。修正致しました。まだエラーが出ていましたら仰ってください。はい。可能ならば指定時間にリロードされるものが良いです。
guest

回答2

0

ベストアンサー

複雑に計算せずとも目的の日時と今の差をとるだけでいいでしょう。
ミリ秒(Unix時間の差)が返るので、そのままsetTimeout()に使えます。

JavaScript

1new Date(2018, 11, 25, 12) - new Date()

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/valueof

投稿2018/11/15 14:22

x_x

総合スコア13749

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

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

yksg_09315

2018/11/16 12:53

ありがとうございます! 難しく考えすぎていたようです。 まんまですと指定時間が過ぎた際に永遠とリロードしてしまったので var today = new Date; var startday = new Date("2018/12/25 12:00:00"); var jisa = startday - today setTimeout(function(){ if(jisa > 0 ) location.reload() },jisa) としたら思った通りの動きをしました! ありがとうございました!!
x_x

2018/11/19 04:29

負の値では呼ぶ意味がなくなるので if (jisa > 0) { setTimeout(function(){ location.reload(); }, jisa); } のほうがいいかもしれません。
yksg_09315

2018/11/19 13:49

やってみます! コメントありがとうございます!!
guest

0

1秒毎に時間を判定する例です。
参考にどうぞ。

javascript

1// 変数_ に 2018/12/25 12:00を代入 2const _ = new Date(2018, 11, 25, 12, 0); 3 4// 変数_ が 現在時刻より大きいか判定(2018/12/25 12:00を超えていないか?) 5if(_ > Date.now()){ 6 // 1秒毎に実行するTimerを設定 7 setInterval(function(){ 8 // 変数_ が 現在時刻より小さい判定(2018/12/25 12:00を超えたか?) 9 if(_ <= Date.now()){ 10 // 指定時間を越えたのでreload実行(reload後は最初のif文の条件は成立しない) 11 location.reload(true) 12 } 13 }, 1000) 14}

ただし、判定に使用している時刻は、クライアントの時刻を見ているので、クライアント側で調整されると表示されてしまいます。

投稿2018/11/15 14:22

編集2018/11/17 01:23
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yksg_09315

2018/11/16 12:55

ありがとうございます! 最初何も判らなかったので、ただただ上記をコピペしたら思った通りの動きをした為、とても感動致しました。 こちらも参考に致しました。 お答えくださり、本当にありがとうございます。
退会済みユーザー

退会済みユーザー

2018/11/17 01:32 編集

コメントを追加したので、理解に役立ててください。
yksg_09315

2018/11/17 07:37

凄い判りやすいコメントを追加してくださりありがとうございます!! 勉強始めたての自分に理解しやすく書いてくださり、凄く凄く嬉しいです! 解決後もコメントをくださり、本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問