bootstrap-datetimepicker.js での LocalTime対応

Pocket
このエントリーをはてなブックマークに追加

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日までしか選択出来ないように出来た。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です