1

私はJavascriptを使用しなければならない割り当てに取り組んでいます。私のアプリケーションでは、ユーザーがフォームに日付を入力します。次に、その日付を現在の日付と比較してみます。違いは、タスクを完了するために必要な日数です。ただし、計算に関しては少し問題があります。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";
        }
    }

この問題は、現在の日付をフォームに入力すると発生します。math.floorとmath.roundを試しましたが、数値は常に切り上げられ、タスクが期限切れであるというメッセージが表示されます。parseIntを使用することで、希望する結果に最も近づきましたが、明日の日付を入力すると、期限が過ぎていると表示されます。助言がありますか?

4

2 に答える 2

2

http://jsfiddle.net/sujesharukil/QspFj/

使用する

 var days = Math.ceil(daysCal);

parseIntの代わりに。

于 2013-03-19T20:17:17.387 に答える
0

new Date(year, month, day);午前0:00のタイムスタンプが作成されることに注意してください。

したがって、その日に発生するdiffすべてのことは、すでにネガティブになっています(> -1ただし)。Math.ceilしたがって、丸めの代わりに使用する必要があります。または、期限を23:59:59に設定します(つまり、1日を1つ増やします)。

于 2013-03-19T20:24:26.557 に答える