2013-03-19 5 views
1

자바 스크립트를 사용해야하는 과제를 진행하고 있습니다. 내 응용 프로그램에서 사용자는 양식에 날짜를 입력합니다. 그런 다음 그 날짜를 현재 날짜와 비교하려고합니다. 차이점은 작업을 완료해야하는 일 수입니다. 그러나 계산에 관해서는 약간의 문제가 있습니다. dueDate는 동적으로 생성 된 객체의 매개 변수입니다.두 날짜의 차이가 있음

function getFormData() { 
    var adate = document.getElementById("dueDate").value; 
    if (checkInputText(dueDate, "Please enter a date")) return;  

... 
} 

function processDate(adate) { 
var splitArray = adate.split("-"); 
var year = splitArray[0]; 
var month = splitArray[1] - 1; 
var day = splitArray[2]; 
var date = new Date(year, month, day); 
var dateParse = date.getTime(); 
return dateParse; 
} 


function compareDates(dueDate) { //dueDate is the value from the form 
     var cdate = new Date(); 
     console.log("this is todays date" + " " + cdate); //shows correct date 
     var cdateparse = Date.parse(cdate); 
     var dueDateparse = Date.parse(dueDate); 
     var diff = dueDateparse - cdateparse; 
     var daysCal = diff/1000/60/60/24; 
     var days = parseInt(daysCal); //where I'm having trouble 
     console.log(days); 
     if (days == 0) { 
      mymessage = " you have to do this task today"; 
     } 
     try { 
      if (days < 0) { 
       mymessage = "this task is overdue by" + " " + -days + " " + "days"; 
       throw new Error("you are overdue"); 
      } 
     } catch (ex) { 
      alert(ex.message); 
      return; 
     } 
     if (days > 0) { 
      console.log("the difference is greater than 0"); 
      mymessage = "you have" + " " + days + " " + "more days"; 
     } 
    } 

현재 날짜를 양식에 입력하면 문제가 발생합니다. 나는 수학을 시도했다. 바닥과 수학. 그러나 그 수는 항상 반올림되어 과제가 기한이라고 말하는 나의 메시지를 던진다. parseInt를 사용하면 원하는 결과에 가장 가깝지만, 내일 날짜에 넣으면 기한이 지난 것으로 나타납니다. 어떤 제안?

+0

dueDate에 예제 값을 줄 수 있습니까? 나는이 예에서 당신에게 어떤 가치가 주어 졌는지 말할 수 없다. – alexp

+0

예, 오늘은 2013-03-19입니다. – user2084813

+0

오늘 날짜로 시도하면 어떻게됩니까? http://jsfiddle.net/mK23N/ ->'당신은 1 일 더 남았습니다 .' – dfsq

답변

0

new Date(year, month, day);은 오전 0:00에 대한 타임 스탬프를 만듭니다.

그 날에 일에에 일어나는 일은 모두 이미 음수 인 diff (> -1)이됩니다. 따라서 반올림 대신 Math.ceil을 사용해야합니다. 또는 마감일을 23시 59 분 59 초로 설정합니다 (즉, 일을 1 씩 늘리십시오).

관련 문제