JavaScriptで曜日ごとに表示内容を変える方法
ショップによっては毎週土曜日はセール日などといったイベントを定期的に開催したりしているのではないでしょうか。
先日書いた記事
表示、非表示を簡単に切り替える方法を紹介しました。
先日の記事と関連する内容になりますがjavascriptで曜日ごとに表示を切り替える方法、曜日と時間帯で表示を切り替える方法を紹介したいと思います。
javascriptで曜日によって表示する内容を切り替える
毎週金曜日は、セールの日とか曜日ごとに定期的にイベントを開催しているショップも多いのではないでしょうか。
そんな定期的にイベントを開催する際にページの表示内容をイベント開催時の表示、開催前の表示、開催後の表示等、曜日によって表示する内容を手入力で書き換えているショップさんには便利な方法かと思います。
曜日ごとのサンプルソース
サンプルソース 色々非表示
<script> function Settoday(){ var today = new Date() ; var weekday = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ] ; document.getElementById(weekday[today.getDay()]).style.display="block"; } </script> <body onload="Settoday();"> <div id="Sun" style="display:none;"> 日曜日に表示する内容 <img src="画像URL"> </div> <div id="Mon" style="display:none;"> 月曜日に表示する内容 <img src="画像URL"> </div> <div id="Tue" style="display:none;"> 火曜日に表示する内容 <img src="画像URL"> </div> <div id="Wed" style="display:none;"> 水曜日に表示する内容 <img src="画像URL"> </div> <div id="Thu" style="display:none;"> 木曜日に表示する内容 <img src="画像URL"> </div> <div id="Fri" style="display:none;"> 金曜日に表示する内容 <img src="画像URL"> </div> <div id="Sat" style="display:none;"> 土曜日に表示する内容 <img src="画像URL"> </div> </body>
各曜日ごとの<div id=”曜日”></div>を予め作成しておきます。
このサンプルでは<div></div>内の記述は文字と画像だけと短めになっていますが、実際にはもっと長くなるかと思います。各曜日に表示したい内容を細かく作り込むことも可能です。
そして、すべての曜日に対してstyle=”display:none;”として、非表示の状態にしてます。
<body onload=”Settoday();”> としているのが、読み込み時に定義したjavascriptを呼び出しています。
javascriptの内容としては、ページを読み込んだ時点の日時を取得して曜日を求めています。そして求めた曜日からjavascriptで、どの曜日の<div>を表示するかを制御をしています。
イベント開催の曜日であれば本日、○○イベントです・・・
開催前の曜日であれば、明日は○○イベント・・・
それ以外の曜日は、毎週○曜日は○○イベントですとか、商品のバナーを表示するなどイベントとは関係ない内容・・・ としても良いかもしれません。
曜日別表示切り替えサンプル
この記事を見ている現在の曜日によって表示する内容が切り替わっているかと思います。
曜日と時間帯を組み合わせて表示を切り替えるjavascript
さきほどのサンプルは、曜日のみを指定する方法でしたが、時間帯も指定する方法も紹介しておこうかと思います。
javascript部分のみ
<script> function Settoday(){ var today = new Date() ; var nowtime= ("0"+today.getHours()).slice(-2) +":"+("0"+today.getMinutes()).slice(-2); var weekday = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ] ; var startlist = [ "", "10:00", "", "22:00", "", "", "19:00" ]; var endlist = [ "", "16:00", "", "", "", "", "21:00" ]; var starttime="00:00"; var endtime="24:00"; if(startlist [today.getDay()] != ""){ starttime=startlist [today.getDay()]; } if(endlist [today.getDay()] != ""){ endtime=endlist [today.getDay()]; } if ( nowtime >= starttime && nowtime <= endtime){ document.getElementById(weekday[today.getDay()]).style.display="block"; } } </script>
html部分は省略しています。
var startlist = [ “”, “10:00”, “”, “22:00”, “”, “”, “19:00” ];
var endlist = [ “”, “16:00”, “”, “”, “”, “”, “21:00” ];
の部分で表示したい時間帯を設定します。
startlistが各曜日での開始時間、endlistが各曜日での終了時間を設定をします。
リスト内の並びとしては日、月、火、水、木、金、土となっています。
↑のリストでの設定は
月曜日は10:00から16:00に表示、水曜日は22:00以降に表示、土曜日は19:00から21:00に表示 です。時間を何も指定していない場合は、その曜日の内容は終日表示されます。
1日の中で2回に分けて時間帯を指定する方法
H27.7.2追記しました
コメントにて
>日曜 00:00~24:00
>月曜 00:00~06:00 20:00~24:00
>火曜 00:00~06:00 20:00~24:00
>水曜 00:00~06:00 20:00~24:00
>木曜 00:00~06:00 20:00~24:00
>金曜 00:00~06:00 20:00~24:00
>土曜 00:00~24:00
>1日の中で2回に分けて時間帯を指定することなどは可能なのでしょうか?
という質問を頂きましたので、紹介したいと思います。
さきほどの1つの時間帯のソースをベースに改良してみます。
<script> function Settoday(){ var today = new Date() ; var nowtime= ("0"+today.getHours()).slice(-2) +":"+("0"+today.getMinutes()).slice(-2); var weekday = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ] ; //リスト1 var startlist1 = [ "", "", "", "", "", "", "" ]; var endlist1 = [ "", "06:00", "06:00", "06:00", "06:00", "06:00", "" ]; //リスト2 var startlist2 = [ "", "20:00", "20:00", "20:00", "20:00", "20:00", "" ]; var endlist2 = [ "", "", "", "", "", "", "" ]; var starttime="00:00"; var endtime="24:00"; //リスト1のチェック if(startlist1[today.getDay()] != ""){ starttime=startlist1[today.getDay()]; } if(endlist1[today.getDay()] != ""){ endtime=endlist1[today.getDay()]; } if ( nowtime >= starttime&& nowtime <= endtime){ document.getElementById(weekday[today.getDay()]).style.display="block"; } starttime="00:00"; endtime="24:00"; //リスト2のチェック if(startlist2[today.getDay()] != ""){ starttime=startlist2[today.getDay()]; } if(endlist2[today.getDay()] != ""){ endtime=endlist2[today.getDay()]; } if ( nowtime >= starttime&& nowtime <= endtime){ document.getElementById(weekday[today.getDay()]).style.display="block"; } } </script>
時間帯指定をするリストを2つに増やしました。
1つ目のリスト startlist1 と endlist1
var startlist1 = [ “”, “”, “”, “”, “”, “”, “” ];
var endlist1 = [ “”, “06:00”, “06:00”, “06:00”, “06:00”, “06:00”, “” ];
2つ目のリスト startlist2 と endlist2
var startlist2 = [ “”, “20:00”, “20:00”, “20:00”, “20:00”, “20:00”, “” ];
var endlist2 = [ “”, “”, “”, “”, “”, “”, “” ];
それぞれのリストで時間を設定します。
次に、表示するかのチェックをする部分に1つ目のチェックに加えて2つ目のチェックする記述を追加します。
これで、1日の中で時間帯を2つ指定することが出来ます。
時間の指定の際の注意点としては、00:00形式で指定するところです。
朝の9時から指定する場合は、9:00 ではなく、09:00とする必要があります。
もうひと手間かけるとしたら、時間帯を設定している曜日で表示時間外に表示する内容を設定出来てないところですかね。
もし、要望あれば追記しようかと思います。
複数箇所にて表示・非表示を設定する場合
H27.11.18 追記しました
コメント欄にて同一ページで複数箇所で設置したら最初の1つしか表示されなかったと頂きましたので、複数箇所への対応について記述します。上で紹介しているサンプルはhtmlの記述部分はid属性にid=”Sun”のように曜日ごとのid属性を割り当てています。javascript上ではidがSunのhtml要素を表示状態にしてね。といった命令をしています。
このid属性についてですが、細かくは書きませんが1ページ内で1つの要素に対しては1つのidを指定します。複数存在させてはいけません。複数指定する場合は、classを使います。また、html部分をクラスを使った記述に変更するのであれば、javascriptもそれに合わせて変更する必要がありますので、サンプルソースを載せておきます。
<script> function Settoday(){ var today = new Date() ; var nowtime= ("0"+today.getHours()).slice(-2) +":"+("0"+today.getMinutes()).slice(-2); var weekday = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ] ; var starttime = [ "", "23:00", "20:00", "", "", "", "" ]; var endtime = [ "", "23:59", "22:00", "", "", "", "" ]; var start="00:00"; var end="24:00"; if(starttime[today.getDay()] != ""){ start=starttime[today.getDay()]; } if(endtime[today.getDay()] != ""){ end=endtime[today.getDay()]; } if ( nowtime >= start && nowtime <= end ){ var classlist = document.getElementsByClassName(weekday[today.getDay()]); for(var i=0,l=classlist.length; l>i; i++){ classlist[i].style.display="block"; } } } </script> <body onload="Settoday();"> 1カ所目------------------------------------ <div class="Sun" style="display:none;"> 日曜日に表示する内容 </div> <div class="Mon" style="display:none;"> 月曜日に表示する内容 </div> <div class="Tue" style="display:none;"> 火曜日に表示する内容 </div> <div class="Wed" style="display:none;"> 水曜日に表示する内容 </div> <div class="Thu" style="display:none;"> 木曜日に表示する内容 </div> <div class="Fri" style="display:none;"> 金曜日に表示する内容 </div> <div class="Sat" style="display:none;"> 土曜日に表示する内容 </div> ・ ・ ・ 2カ所目------------------------------------ <div class="Sun" style="display:none;"> 日曜日に表示する内容 </div> <div class="Mon" style="display:none;"> 月曜日に表示する内容 </div> <div class="Tue" style="display:none;"> 火曜日に表示する内容 </div> <div class="Wed" style="display:none;"> 水曜日に表示する内容 </div> <div class="Thu" style="display:none;"> 木曜日に表示する内容 </div> <div class="Fri" style="display:none;"> 金曜日に表示する内容 </div> <div class="Sat" style="display:none;"> 土曜日に表示する内容 </div> </body>
javascript部分の20行目から23行目を修正しました。
20行目でクラスの要素を取得しています。複数あることが前提で対象曜日の要素を取得しています。ページ内にclass=”Fri”の要素が3つあったとすると3個分の要素をリストとして取得します。
21行目 for(var i=0,l=classlist.length; l>i; i++){ の部分は繰り返し処理の開始部分です。何回繰り返すのかといったことを書いていますが、ここでは1つ前で取得した「リストの件数分繰り返してね」という意味です。
22行目 繰り返し処理される内容を記述しています。リスト1つ目を表示する、リスト2つ目を表示する、リスト3つ目を表示するといった処理内容です。
23行目 } 繰り返しの終わり部分
また、htmlの記述もid=”Fri”といったid属性での指定ではなく、class=”Fri”と変更しています。これでページ内の表示死体箇所に複数箇所設定することができます。
このサンプルソースでは同じclassは2つしか記述していませんが、複数箇所設置することが可能です。
動作サンプル
毎週金曜日の21時から23時はセールイベントを開催といった場合などページへのバナーなど導線を複数設置しておいて自動的に表示したい場合には使える方法ではないでしょうか。
1日の中でも時間帯に応じて違うものを表示する場合
H28.3.13 追記しました
コメントにて
>1日の中で2回に分けて時間帯を指定する方法のご質問なのですが
>例えば午前と午後に違う画像を表示させることとかできるのでしょうか?
同じ曜日でも表示する内容を時間帯に応じて違うものにしたい場合のサンプルソースを掲載してみます。
<script> function settoday(){ var today = new Date() ; var nowtime= ("0"+today.getHours()).slice(-2) +":"+("0"+today.getMinutes()).slice(-2); var weekday1 = [ "Sun1", "Mon1", "Tue1", "Wed1", "Thu1", "Fri1", "Sat1" ] ; var weekday2 = [ "Sun2", "Mon2", "Tue2", "Wed2", "Thu2", "Fri2", "Sat2" ] ; //リスト1 var startlist1 = [ "", "", "", "", "", "", "" ]; var endlist1 = [ "11:59", "11:59", "11:59", "11:59", "11:59", "11:59", "11:59" ]; //リスト2 var startlist2 = [ "12:00", "12:00", "12:00", "12:00", "12:00", "12:00", "12:00" ]; var endlist2 = [ "", "", "", "", "", "", "" ]; var starttime="00:00"; var endtime="24:00"; //リスト1のチェック if(startlist1[today.getDay()] != ""){ starttime=startlist1[today.getDay()]; } if(endlist1[today.getDay()] != ""){ endtime=endlist1[today.getDay()]; } if ( nowtime >= starttime&& nowtime <= endtime){ document.getElementById(weekday1[today.getDay()]).style.display="block"; } starttime="00:00"; endtime="24:00"; //リスト2のチェック if(startlist2[today.getDay()] != ""){ starttime=startlist2[today.getDay()]; } if(endlist2[today.getDay()] != ""){ endtime=endlist2[today.getDay()]; } if ( nowtime >= starttime&& nowtime <= endtime){ document.getElementById(weekday2[today.getDay()]).style.display="block"; } } </script> </head> <body onload="settoday();"> <div id="Sun1" style="display:none;"> 日曜日にリスト1の時間帯に表示する内容 </div> <div id="Sun2" style="display:none;"> 日曜日にリスト2の時間帯に表示する内容 </div> <div id="Mon1" style="display:none;"> 月曜日にリスト1の時間帯に表示する内容 </div> <div id="Mon2" style="display:none;"> 月曜日にリスト2の時間帯に表示する内容 </div> <div id="Tue1" style="display:none;"> 火曜日にリスト1の時間帯に表示する内容 </div> <div id="Tue2" style="display:none;"> 火曜日にリスト2の時間帯に表示する内容 </div> <div id="Wed1" style="display:none;"> 水曜日にリスト1の時間帯に表示する内容 </div> <div id="Wed2" style="display:none;"> 水曜日にリスト2の時間帯に表示する内容 </div> <div id="Thu1" style="display:none;"> 木曜日にリスト1の時間帯に表示する内容 </div> <div id="Thu2" style="display:none;"> 木曜日にリスト2の時間帯に表示する内容 </div> <div id="Fri1" style="display:none;"> 金曜日にリスト1の時間帯に表示する内容 </div> <div id="Fri2" style="display:none;"> 金曜日にリスト2の時間帯に表示する内容 </div> <div id="Sat1" style="display:none;"> 土曜日にリスト1の時間帯に表示する内容 </div> <div id="Sat2" style="display:none;"> 土曜日にリスト2の時間帯に表示する内容 </div> </body>
1日の中でも表示する内容を2つにわけるために、何箇所か修正しています。
5、6行目
var weekday1 = [ “Sun1”, “Mon1”, “Tue1”, “Wed1”, “Thu1”, “Fri1”, “Sat1” ] ;
var weekday2 = [ “Sun2”, “Mon2”, “Tue2”, “Wed2”, “Thu2”, “Fri2”, “Sat2″ ] ;
idで指定する曜日の名前を指定するリストを2つに分けました。weekday1が時間帯リスト1用、weekday2が時間帯リスト2用という使い方です。
48行目以降 タグの記述について
<div id=”Sun1″ style=”display:none;”>
日曜日にリスト1の時間帯に表示する内容
</div>
<div id=”Sun2″ style=”display:none;”>
日曜日にリスト2の時間帯に表示する内容
</div>
実際に表示する内容を記述するタグでは、id=”Sun1″とid=”Sun2″と別々に記述しておきます。これで、リスト1の時間帯では、id=”Sun1″が表示され、リスト2の時間帯ではid=”Sun2″が表示されます。
これで、同じ曜日でも午前中と午後とで表示する内容を変更することが出来ると思います。
はじめまして!
曜日、時間帯によっての表示切り替えについて、
大変参考にさせていただきました。
ご質問させていただきたいのですが、
例えば、表示させる時間帯が、
日曜 00:00~24:00
月曜 00:00~06:00 20:00~24:00
火曜 00:00~06:00 20:00~24:00
水曜 00:00~06:00 20:00~24:00
木曜 00:00~06:00 20:00~24:00
金曜 00:00~06:00 20:00~24:00
土曜 00:00~24:00
といった具合に、1日の中で2回に分けて
時間帯を指定することなどは可能なのでしょうか?