检查日期是否属于日期数组

11

我正在尝试检查一个来自jQuery UI日期选择器的日期是否属于一个假日日期数组。不知道我错在哪里:(

var holidayArray2013 = [new Date('October 3, 2013 00:00:00 GMT+0200'), new Date('December 25, 2013 00:00:00 GMT+0100'), new Date('December 26, 2013 00:00:00 GMT+0100')];
var DateOfOrder = $('#datepicker').datepicker('getDate');
if ($.inArray(DateOfOrder, holidayArray2013) > -1) {
  console.log("is holiday");
}

编辑:console.log(DateOfOrder);返回Thu Oct 03 2013 00:00:00 GMT+0200,就像holidayArray2013 [0]一样,但是$.inArray(DateOfOrder,holidayArray2013)仍然返回-1


2
除非您告诉我们出现了错误或者结果与您所期望的不符,否则我们无法解决问题。 - Jamiec
1
DateOfOrder 的值是多少? - Felix Kling
1
你正在寻找两个不同的对象,即使它们可能是相同的日期。你需要将日期存储为字符串,并搜索一个字符串(其中一种可能的方法)。 - Xotic750
1
当您使用 console.log 时,它会在日期对象上执行 toString - Xotic750
2
请查看两个相同的JavaScript日期不相等 - Felix Kling
显示剩余2条评论
3个回答

34

由于比较两个日期对象会比较它们的引用而不是您可能期望的,因此您得到了一个错误的负结果。

有几个选项,您可以在数组中存储Date.getTime()的结果,这只是日期的数字表示:

var holidayArray2013 = [
        new Date('October 3, 2013 00:00:00 GMT+0200').getTime(), 
        new Date('December 25, 2013 00:00:00 GMT+0100').getTime(), 
        new Date('December 26, 2013 00:00:00 GMT+0100').getTime()];

然后进行比较:

var DateOfOrder = n$('#datepicker').datepicker('getDate').getTime();
if ($.inArray(DateOfOrder, holidayArray2013) > -1) ...

这个工作得很好,可以在这里演示:http://jsfiddle.net/rRJer/

如果你不能改变假期数组,那么你可以循环查找正确的日期值:

var isHoliday = false;
for(var i=0;i<holidayArray2013.length;i++){
    if(holidayArray2013[i].getTime() == DateOfOrder.getTime()){
        isHoliday = true;
        break;
    }
}

演示在这里:http://jsfiddle.net/3R6GD/


谢谢Jamie,我接受了你的回答,因为它是最精确的,并且提供了我需要的替代方案。 - foozed

1

请检查此http://jsfiddle.net/WNYRs/

var holidayArray2013 = [new Date('October 3, 2013 00:00:00 GMT+0200').getTime(),
                        new Date('December 25, 2013 00:00:00 GMT+0100').getTime(),
                        new Date('December 26, 2013 00:00:00 GMT+0100').getTime()];

使用类似这样的内容:
var DateOfOrder = new Date($('#datepicker').datepicker({ dateFormat: 'yy-mm-dd' }).val()).getTime();

您需要使用Date.getTime()来比较两个日期,参见:如何使用jQuery比较两个日期值


0
你可以在日期上使用 .valueOf() 函数,然后 $.inArray 就能胜任这项工作:
var holidayArray2013 = [
    new Date('October 3, 2013 00:00:00 GMT+0200').valueOf(),
    new Date('December 25, 2013 00:00:00 GMT+0100').valueOf(),
    new Date('December 26, 2013 00:00:00 GMT+0100').valueOf() ];

var DateOfOrder = $('#datepicker').datepicker('getDate').valueOf();
if ($.inArray(DateOfOrder, holidayArray2013) > -1) {
    console.log("is holiday");
}

请查看http://jsfiddle.net/mmeRD/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接