2015-09-05 99 views
1

嗨我有一个场景,我需要获得最近两周销售的书籍数量。我正在使用Javascript。一切都很好,直到今天。当星期五是比较失败。下面是例子。无法比较星期五日期JavaScript

//Function to get Monday of thisweek,last week and last to last week. 
     function GetMonday(mday) { 
     var today, todayNumber, mondayNumber, monday; 
     today = new Date(); 
     todayNumber = today.getDay(); 
     mondayNumber = mday - todayNumber; 
     return new Date(today.getFullYear(), today.getMonth(), today.getDate() + mondayNumber).toDateString(); 
} 


    var currDate = new Date().toDateString(); // gets todays date 
    var currwkDate = GetMonday(1); //Gets this week Monday's Date 
    var lastwkDate = GetMonday(-6); //Gets last week Monday's Date 
    var twowkDate = GetMonday(-13); //Gets Last to last week Monday's Date 

    var BillDate=new Date("09/04/2015").toDateString(); // Friday (04 Sep) 
      if (currDate == BillDate) { 
       alert("equal"); 
      } 
      if (BillDate > currwkDate) { 
       alert("this week"); 
      } 
      if (BillDate > lastwkDate) { 
       alert("last week"); 
      } 
      if (BillDate > twowkDate) { 
       alert("two week") 
      } 

理想上面的代码应该得到三个警告框(本周最后一周,二周)的击打它没有给甚至一个警报。

如果我修改上面的代码,并把BillDate到这是不一样周五代码将正常工作,例如

var BillDate= new Date("09/03/2015").toDateString(); //Thursday 03-Sep 

我不知道是什么问题,请帮助的任何其他日期!!!!!

回答

1

你的代码实际上是在进行字符串比较而不是日期比较。这种失败的原因是因为周一的M小于T,WS,但不是F

这就使BillDate > currwkDate只有错误,如果它是星期五。自F < M。解决方法是比较日期,而不是(除去toDateString用途):

//Function to get Monday of thisweek,last week and last to last week. 
     function GetMonday(mday) { 
     var today, todayNumber, mondayNumber, monday; 
     today = new Date(); 
     todayNumber = today.getDay(); 
     mondayNumber = mday - todayNumber; 
     return new Date(today.getFullYear(), today.getMonth(), today.getDate() + mondayNumber); 
} 


    var currDate = new Date(); // gets todays date 
    var currwkDate = GetMonday(1); //Gets this week Monday's Date 
    var lastwkDate = GetMonday(-6); //Gets last week Monday's Date 
    var twowkDate = GetMonday(-13); //Gets Last to last week Monday's Date 

    var BillDate=new Date("09/04/2015"); // Friday (04 Sep) 
      if (currDate.getYear() == BillDate.getYear() && currDate.getMonth() == BillDate.getMonth() && currDate.getDate() == BillDate.getDate()) { 
       alert("equal"); 
      } 
      if (BillDate > currwkDate) { 
       alert("this week"); 
      } 
      if (BillDate > lastwkDate) { 
       alert("last week"); 
      } 
      if (BillDate > twowkDate) { 
       alert("two week") 
      } 

编辑:第一次检查的日期等于也需要进行修改,以仅检查年份,月份和日期(忽略时间的/ etc )。

+0

谢谢你的答案,我忘了提及BillDate将有时间包括在它之中..我之所以去toDateString的原因是因为我想比较没有时间戳的日期..但正如你所说我的日期正在转换字符串以便toDateString选项不再有效。 你知道有什么其他的方式可以比较我的日期吗? –

+0

@manthandavda对于代码中的比较,时间戳不重要,因为例如9月7日之后,无论Seputper 9在一天中的什么时间,它都是* always *。我修改了顶部的“平等”检查,只检查年份,月份和日期,因为如果时间戳存在,只有检查失败。 – tcooc

+0

同意只有第一次检查失败休息一切都会正常工作..对不起,问这个,但是比他们更好地比较年,月和日? –