2010-07-23 57 views
2

我创建了一个日期数组正常工作:

var holidays = ["7/24/2010","7/25/2010"]; 
var holidaysArray = jQuery.makeArray(holidays); 

,然后再测试,看看是否指明MyDate(Date对象)的存在array:

if ($.inArray(myDate, holidaysArray) == -1) {....} 

但是,即使myDate是两天中的一天,测试总是返回-1。我试图避免使用日期字符串进行测试。

如何在日期对象和日期对象数组中使用inArray函数? (我不知道如果holidaysArray实际上是日期对象的数组,并且可能这就是测试失败的原因。)

+2

想知道为什么当'holidays'时使用'jQuery.makeArray()'已经是一个真正的Array。 – user113716 2010-07-23 22:02:51

+0

帕特里克是正确的,你使用makeArray看起来像一个数组,但不是(像一个函数里面的'arguments'变量) – 2010-07-23 22:06:02

+0

我的意图是将一个字符串数组转换为一个日期对象数组。我不知道如何使用makeArray来实现这一点。 myDate是一个日期对象。这不是一个字符串。我假设inArray()对两个参数使用相同的类型。 – 2010-07-23 22:17:20

回答

4

我认为你在比较DateString对象,这就是为什么你总是会得到错误的原因。

看到:

new Date("12/12/2000") == "12/12/2000" // this is false 

编辑:

也!注意:

new Date("12/12/2000") == new Date("12/12/2000") // this is false too! 

你应该使用这样

new Date("12/12/2000").valueOf() == new Date("12/12/2000").valueOf() // this is TRUE 
0

其划时代的时间值总结别人的答案比较日期:

  1. 你已经有一个数组,你不需要使用makeArray()。
  2. 你的数组不包含日期,它包含字符串。
  3. 无法在JavaScript中直接比较日期。
0

基本上你想执行一个搜索(查找),对吧?

如果你制定你的数组是这样的:

var holidays = [{ date: "7/24/2010" }, { date: "7/25/2010" }]; 

,并创建一个jOrder表出来,按日期(唯一的)索引:

var table = jOrder(holidays) 
    .index('date', ['date']); 

然后你可以检查的存在在这个表中的某些日期是这样的:

if (!table.where([{ date: myDate }]).length) {....}