3

我使用 jQuery datepicker 向用户显示可用天数,并希望禁用并标记红色繁忙天数。我使用这个beforeShowDay日期选择器选项:

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];
        }

busyStartsbusyEnds变量是:

在此处输入图像描述

但我看到了这个结果:

在此处输入图像描述

未选择间隔的第一天。为什么?我有条件日期 >=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 回答