我正在开发一个使用大量jQuery UI控件的asp.net应用程序,尤其是日期选择器。
在我的Web服务中,我正在调用数据库并检索对象列表,然后将它们传递回我的javascript,然后将其解析为包含一个或多个对象的数组,如下所示:
javascript object http://s7.postimage.org/9nsq80rnv/JSON_object.png
我需要包含某种逻辑,我可以在其中循环遍历此对象数组,并检查javascript Date是否落在对象的EndDate和StartDate属性之间,以便我可以为其应用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"];
}
}
答案 0 :(得分:2)
StartDate和EndDate对我来说似乎是有效的JSON,除了结尾和开头的斜杠。否则,值的简单eval应该生成一个可以操作的JS Date Object。
对于你的第二点,是什么阻止你在数组上经典循环?一些代码对于说更多内容会更有用。
答案 1 :(得分: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.
}
以上似乎以我理解的方式回答了你的问题。
答案 2 :(得分:2)
只需将您的开始日期和结束日期作为数字返回,而不使用\ Date()\ wrappers。
在循环中,从目标日期创建JavaScript日期,即new Date(1334548800000)
,然后在目标日期与开始日期和结束日期之间使用简单比较。
虽然您可以使用$.each(yourArray, function(id,item){ date comparison logic here });
循环,但我建议您查看Underscore库以获取一组适当的实用程序来操作JS对象。