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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

2150閲覧

jQueryで毎日指定時間のみ表示するコンテンツを作りたいです

babirudebiruba

総合スコア16

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/02/07 11:32

編集2020/02/08 11:56

#やりたいこと
毎日指定時間内だけ表示されるコンテンツを作りたいです。
初心者でネットでいろいろ調べて、日時を含む期間で表示にすることはできました。
しかしそれでは毎日ではなく1度非表示になったら終わりなので困っています。

作りたいものとしては、公共施設によくある「○○会議室 19:00~ ○○○○祭り運営 会議」のようなディスプレイや駅や空港の次の列車・便の時間表記みたいなのを作りたいです。
毎日時間が決まっているため、永久的に自動で該当時刻のみ表示させたいです。

#前提
わがままで申し訳ありませんが、以下のコードのように、html上のそれぞれで時間を指定できるやり方が、ベストです。
いくつもの時間を大量に指定し更新をするので同じコードをその分大量に用意するのは現実的でなく、更新が不可能だから。

一応参考にしたサイトです。
jQueryで期間限定など日時指定表示で要素を表示・非表示と切り替えたい!

#コード

jQuery

1$(function(){ 2 setInterval(function(){ 3 $(document).ready(function() { 4 $(".view_timer").each(function(index, target) { 5 var startDate = $(this).attr("data-start-date"); 6 var endDate = $(this).attr("data-end-date"); 7 var nowDate = new Date(); 8 if (startDate) { 9 startDate = new Date(startDate); 10 } else { 11 startDate = nowDate; 12 } 13 if (endDate) { 14 endDate = new Date(endDate); 15 } 16 if (startDate <= nowDate && (!endDate || nowDate <= endDate)) { 17 $(this).show(); 18 } else { 19 $(this).hide(); 20 } 21 }); 22 },4000); 23 }); 24}); 25

HTML

1<span class="view_timer" data-start-date="2020/2/1 0:00" data-end-date="2020/2/6 16:50"> 2 <div class="info"> 3 <p>表示したいコンテンツ</p> 4 </div> 5</span>

 
data-start-date="2020/2/1 0:00" data-end-date="2020/2/6 16:50" を
data-start-date="0:00" data-end-date="16:50" のように出来ませんか?

よろしくお願いします。

#追記

ネットで調べると、時間の取り出し方は書いてあったのですが、それの使い方がいまいちわかりませんでした。
適当に書いてみたのを載せておきます。

エラーはUncaught ReferenceError: nowDatetime is not definedですが、そもそも記述方法間違えていると思いますので...

jQuery

1$(function(){ 2 setInterval(function(){ 3 $(document).ready(function() { 4 $(".view_timer").each(function(index, target) { 5 var hour = nowDatetime.getHours(); 6 var minute = nowDatetime.getMinutes(); 7 var second = nowDatetime.getSeconds(); 8 var startDate = $(this).attr("data-start-date"); 9 var endDate = $(this).attr("data-end-date"); 10 var nowDate = ("minute+second"); 11 if (startDate) { 12 startDate = new Date(startDate); 13 } else { 14 startDate = nowDate; 15 } 16 if (endDate) { 17 endDate = new Date(endDate); 18 } 19 if (startDate <= nowDate && (!endDate || nowDate <= endDate)) { 20 $(this).show(); 21 } else { 22 $(this).hide(); 23 } 24 }); 25 },4000); 26 }); 27});

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

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

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

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

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

guest

回答3

0

ベストアンサー

new Date()の結果のhoursとminutesだけで比較すれば良いのでは。

Date

投稿2020/02/07 13:04

m.ts10806

総合スコア80875

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

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

babirudebiruba

2020/02/08 10:48

ご回答ありがとうございます。 時間だけで比較すればよいことはわかり、ネットで沢山調べましたが、いまいちやり方がわかりません。 getHoursやgetMinutesを使えば良さそうで試してみましたが動かなくなりました。 無知で申し訳ないのですが、どのように記述すると、設定した時刻と現在の時刻を比較することが出来るのか教えていただけませんでしょうか。 よろしくお願いします。
m.ts10806

2020/02/08 11:23

試したコードを提示してください。 「動かない」には幾つもの意味が含まれるので正確に現象伝えてください。エラー確認してますか?
babirudebiruba

2020/02/08 12:01

追記しました。説明不足で申し訳ないです。 ネットで調べると、サイトに現在時刻の表示や日付を含んだものばかりがヒットしてしまい、時間だけを取り出す方法が見つかりませんでした。 自分なりに書いてみましたが絶対に違うことはわかっており、エラーでも書き方がおかしいと注意されています。ほぼ始めてjQueryを触ったので、自分でいろいろ試す知識がなく頼ってしまい申し訳ありません。
m.ts10806

2020/02/08 12:05

コードが劣化しています。 基本的に上から順番に流れていくので、定義されてない変数がいきなり使われていれば当然提示の結果になります。 Dateは引数なしだと「現在日時(システム日時)」を取ります。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date 返されるのはオブジェクトなので、そこから適宜取り出せば良いだけです。 ・・・と言うことですが、「オブジェクトって何」というところからきちんとおさえたほうが良いかと思います
babirudebiruba

2020/02/08 12:15

自分でjQueryについて基礎から学習しようと思います。 ご回答ありがとうございました。
m.ts10806

2020/02/08 19:33

jQueryではなくJavaScriptの話かと・・
babirudebiruba

2020/02/08 23:18

あーそうだったんですね。 jQueryだとどうすると解決につながるか教えていただけませんか?
m.ts10806

2020/02/08 23:39

ちょっと質問の意図が分かりません。 あくまでJavaScriptにおけるロジックの問題であって JavaScriptのライブラリであるjQueryの機能を使うような話ではないです。 now = new Date(); console.log(now.getHours()); で「今何時」がとれる。 s = new Date("2020/2/6 16:50"); console.log(s.getHours()); で「16時」がとれる。 というだけのことではヒントにもなりませんか?
babirudebiruba

2020/02/09 10:08

定義について自分なりに考えて書いてみたらうまくいきました! ご指摘の定義をしないといけないの意味を間違っているとは思いますが理解が出来ました。 いつもネットからコピペだったので今後は自分で書けるように勉強していきたいと思います。 何度もご回答ありがとうございました。
guest

0

回答じゃないです。
この実装の方向性だと、クライアントの時間を参照しています。
要件を見ると、サーバの時間を参照すべきです。

楽なのは、サーバで時間を確認してコンテンツを出し分ける事だと思いますが、JavaScript で取得する方法もあるようです。

サーバの時間 JavaScriptでググるといくつか出てきました。

投稿2020/02/08 23:47

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

解決したコードを載せておきます。

jQuery

1 $(".view_timer").each(function(index, target) { 2 var startDate = $(this).attr("data-start-date"); 3 var endDate = $(this).attr("data-end-date"); 4 var now = new Date(); 5 var hour = now.getHours(); 6 var minute = now.getMinutes(); 7 var time = ('0' + hour).slice(-2) + ":" + ('0' + minute).slice(-2); 8 if (startDate <= time && (!endDate || time <= endDate)) { 9 $(this).show(); 10 } else { 11 $(this).hide(); 12 } 13 });

HTMLで<span class="view_timer" data-start-date="00:00:00" data-end-date="18:29:00">で時刻を設定すればできました。

皆さんありがとうございました。

投稿2020/02/09 10:11

babirudebiruba

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問