2015-09-05 106 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

同意只有第一次檢查失敗休息一切都會正常工作..對不起,問這個,但是比他們更好地比較年,月和日? –