无论使用哪个运算符,日期比较始终返回false

时间:2013-11-15 18:42:15

标签: javascript date

我正在把头发拉出来。我知道==比较总是会在两个日期对象之间返回false。但实际上无法理解为什么这个代码每次都返回false,无论我在哪个方向设置运算符。

      var prevWeek         = response.prevWeek  // The date to compare.
      ,   pickedDate       = prevWeek.split("-");


      var pickedDate = new Date(pickedDate[0], pickedDate[1], pickedDate[2]);
      var todaysDate = new Date();
      console.log(pickedDate); // logs Thu Apr 17 2014 00:00:00 GMT+0100 (GMT)
      console.log(todaysDate); // logs Fri Nov 15 2013 18:30:13 GMT+0000 (GMT)

      var compareValueOf = pickedDate.valueOf() < todaysDate.valueOf();
      console.log(compare); // always returns false


      var compare2 = pickedDate < todaysDate;
      console.log(compare2); // always returns false
      var compare3 = pickedDate.getTime() < todaysDate.getTime();
      console.log(compare3); // always returns false  

3 个答案:

答案 0 :(得分:2)

那是因为picedDate小于todaysDate(2014年&gt; 2013年,而不是相反);)

答案 1 :(得分:1)

如果在2014年设置了pickedDate,而在2013年设置了今天的日期,那么pickDate可能不会比今天的日期小。

答案 2 :(得分:1)

我发现您的代码存在一些问题。

var prevWeek         = response.prevWeek  // The date to compare.
,   pickedDate       = prevWeek.split("-");

我认为respone.prevWeek是一个人类可读的字符串,如2013年3月17日的“2013-03-17”。当你创建一个新的约会对象时,你会得到2013年4月17日,因为Date-object期望在0-11而不是1-12中获得月份。 (这一年没问题,今天也是如此)

  var pickedDate = new Date(pickedDate[0], pickedDate[1], pickedDate[2]);

  var todaysDate = new Date();
  console.log(pickedDate); // logs Thu Apr 17 2014 00:00:00 GMT+0100 (GMT)
  console.log(todaysDate); // logs Fri Nov 15 2013 18:30:13 GMT+0000 (GMT)

请注意,您现在在pickedDate中有时间为2014-04-18 00:00:00.000(包括微秒)和今天日期2013-11-15 18:30:13.324(包括微秒,确切的值不知道所以我做了起来)

  var compareValueOf = pickedDate.valueOf() < todaysDate.valueOf();
  console.log(compare); // always returns false

您可以在上面将值分配到compareValueOf,但会记录compare的值。但即使您确实记录了正确的变量,您也应该false,因为2014年的日期不低于2013年的日期。

  var compare2 = pickedDate < todaysDate;
  console.log(compare2); // always returns false

比较日期对象的另一种方法,即可使用。但是,再次获得false,因为您询问2014年的日期是否小于2013年的日期。事实并非如此。

  var compare3 = pickedDate.getTime() < todaysDate.getTime();
  console.log(compare3); // always returns false  

.valueOf()之间使用getTime()完全相同的另一个比较,因为false给出完全相同的值(自1970年1月1日00:00:00 UTC以来的毫秒数)。再次获得todaysDate,因为选择的日期是将来的。

如果您只想比较日期部分,可以通过运行todaysDate.setHours(0,0,0,0);确保{{1}}的时间部分为零。请注意,有4个参数:小时,分钟,秒和微秒。