bootstrap-datetimepicker.js を使ってカレンダーを表示していたんだけど、任意の月しか選択出来ないようにしたかったので、ちょっと調べてみた。
どうやら、startDate と endDate のオプションを設定すれば、その日付範囲のみ選択可能となる模様。
参考サイト:https://github.com/smalot/bootstrap-datetimepicker
ちょっとやってみたんだけど、どうも1日ズレがある。
ソースを追ったりして色々と調べてみたところ、どうやらUCT標準時での計算をしており、時差が考慮されていなかった。
なので、startDate と endDate に時差分を加算したDateオブジェクトを渡すようにして対応。
参考サイト:ねじろぐ @drillbits様 メモ:JavaScript で システム時刻から別のタイムゾーンの時刻へ変換
<script type="text/javascript"> // DateTimePickerで該当月しか選択出来なくする為、時差を考慮したDateオブジェクトを返す function getTargetUTCDate(d) { // クライアントPCシステム時刻 var localTime = d.getTime(); // localTimeのタイムゾーン差分(ミリ秒) var localOffset = d.getTimezoneOffset() * 60000; // UTC時刻(ミリ秒) var utc = localTime + localOffset; // 考慮したいタイムゾーンの差分(時間):日本の場合は-18時間 var offset = -18.0; // これで目的のミリ秒がでるので var result = utc - (3600000 * offset); d = new Date(result); return d; } $(function() { // 該当月が 2013年11月の場合(Javascriptでの月の指定は-1する) var startdate = new Date(2013, 10, 1); var enddate = new Date(2013, 10, 30); $('#cal').datetimepicker({ pickTime: false, pickSeconds: false, startDate: getTargetUTCDate(startdate), endDate: getTargetUTCDate(enddate) }); }); </script>
これでちゃんと2013年11月1日~2013年11月30日までしか選択出来ないように出来た。