0

我正在开发一个使用大量 jQuery UI 控件的 asp.net 应用程序,尤其是 datepicker。

在我的 Web 服务中,我正在调用数据库并检索对象列表,然后将它们传递回我的 javascript,在那里我将它们解析成一个包含 1 个或多个如下所示对象的数组:

javascript 对象

我需要包含某种逻辑,我可以在其中循环遍历这个对象数组并检查 javascript Date 是否位于对象的 EndDate 和 StartDate 属性之间,以便我可以为 DatePicker 应用 css 样式。第一个问题,有没有办法将 EndDate/StartDate 属性从这种格式转换为有效的 javascript 日期?如果是这样,我如何遍历数组并应用逻辑来查看日期是否在范围内?

任何帮助是极大的赞赏!

编辑:我注意到这里的图像很难看到你可以更清楚地阅读这里的属性:

图片链接

根据要求,这里是一些示例代码:

function createDateRangesForCalendar() {
    $.ajax({
        type: "POST",
        url: "../Services/BookingService.asmx/GetCalendarDateRanges",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: false,
        success: function (response) {
            dateRanges = $.parseJSON(response.d);
        },
        error: function (xhr, textStatus, thrownError) {
            alert(textStatus);
            alert(thrownError);
        }
    });
}

function markInvalidDates(date) {

    var isHoliday = false;
    dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();

    isHoliday = checkIsHoliday(date);

    if ($.inArray(dmy, invalidDays) == -1) {

        for (var i = 0; i < dateRanges.length; i++) {
            // if date falls in between start and end date of object[i] return something like: return [true, "holiday", "Holiday Rates Apply - Minimum 14 days"];
            // else loop through to the next object and try there
            } 

        if (isHoliday == true) {
            return [true, "holiday", "Holiday Rates Apply - Minimum 14 days"];
        } else {
            return [true, ""];
        }
    } else {
        return [false, "unavailable", "Unavailable"];
    }
}
4

3 回答 3

2

StartDate 和 EndDate 对我来说似乎是有效的 JSON,除了结尾和开头的斜线。否则,对值的简单 eval 应该会生成一个可以操作的 JS 日期对象。

对于您的第二点,是什么让您无法对数组进行经典循环?多说一些代码会更有用。

于 2012-06-05T17:15:42.900 回答
2

第一个问题,有没有办法将 EndDate/StartDate 属性从这种格式转换为有效的 javascript 日期?

格式似乎是这样的:/Date(MILLISECONDS)/. 可以像这样获得一个有效的 JS 日期对象new Date(s.match(/Date\((\d+)/)[1])

如果是这样,我如何遍历数组并应用逻辑来查看日期是否在范围内?

var re = /Date\((\d+)/;
for(var i in arr) {
    var start = new Date(arr[i].startDate.match(re)[1]),
        end = new Date(arr[i].endDate.match(re)[1]);
    if(myDate < end && myDate > start)
        // do something.
}

以上似乎回答了你的问题,我理解它的方式。

于 2012-06-05T17:22:58.343 回答
2

只需将您的开始日期和结束日期作为数字返回,而不使用 \Date()\ 包装器。

在您的循环中,从您的目标日期创建一个 JavaScript 日期,即,new Date(1334548800000)然后在您的目标日期与那些开始和结束日期之间进行简单的比较。

虽然您可以循环使用,$.each(yourArray, function(id,item){ date comparison logic here });但我建议您查看 Underscore 库以获得一组体面的实用程序来操作 JS 对象。

于 2012-06-05T17:23:36.123 回答