3

ユーザーに利用可能な日を表示するためにjQuerydatepickerを使用しており、赤の忙しい日を無効にしてマークしたいと考えています。私はこのbeforeShowDaydatepickerオプションに使用します:

beforeShowDay: function(date) {
            var cssClass = '';

            for (var i=0; i < busyStarts.length; i++) {
                var busyStart = new Date(busyStarts[i]);
                var busyEnd = new Date(busyEnds[i]);
                if (date >= busyStart && date <= busyEnd) {
                    cssClass = 'ui-state-disabled busy_date';
                }
            }

            return [true, cssClass];
        }

busyStarts変数とbusyEnds変数は次のとおりです。

ここに画像の説明を入力してください

しかし、私はこの結果を見ます:

ここに画像の説明を入力してください

間隔の最初の日は選択されていません。なんで?条件日>=busyStartがあります

デバッガーを調べたとき: ここに画像の説明を入力してください

そのため、等しい(=)条件が機能しませんでした。開始日と終了日は03:00:00ですが、日付は00:00:00で、日付が同じ日付<= 00:00:00 <03:00:00であるため、同じ日になります。

今、私は尋ねます、なぜですか?そして、これを正しく解決する方法は?

4

2 に答える 2

2

解決済み

コードを変更しました。開始日と終了日の初期化にsetHours(0、0、0、0)を追加しました。

beforeShowDay: function(date) {
            var cssClass = '';

            for (var i=0; i < busyStarts.length; i++) {
                var busyStart = new Date(busyStarts[i]).setHours(0, 0, 0, 0);
                var busyEnd = new Date(busyEnds[i]).setHours(0, 0, 0, 0);
                if (date >= busyStart && date <= busyEnd) {
                    cssClass = 'ui-state-disabled busy_date';
                }
            }

            return [true, cssClass];
        }
于 2012-08-14T12:47:23.207 に答える
0

このステートメントを試してください:

beforeShowDay: function(date) {
        var cssClass = '';

        for (var i=0; i < busyStarts.length; i++) {
            var date = new Date(date),
                busyStart = new Date(busyStarts[i]),
                busyEnd = new Date(busyEnds[i]);
            if (date.getTime() >= busyStart.getTime() && date.getTime() <= busyEnd.getTime()) {
                cssClass = 'ui-state-disabled busy_date';
            }
        }

        return [true, cssClass];
    }

getTime()は、Dateオブジェクトを1970年1月1日00:00:00 UTC(ミリ秒)から経過した時間に変換します。これにより、簡単に比較できる整数が得られます。

于 2012-08-14T13:04:19.287 に答える