【问题标题】:getting the difference between two dates [duplicate]获取两个日期之间的差异[重复]
【发布时间】:2013-03-19 19:57:42
【问题描述】:

我正在处理一项必须使用 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 使我最接近我想要的结果,但是当我输入明天的日期时,它说我已经过期了。有什么建议吗?

【问题讨论】:

  • 你能举一个dueDate的例子吗?从这个例子中我无法判断表单给你的价值。
  • 是的,所以今天应该是 2013-03-19
  • 那么如果你用今天的日期试试它会说明什么? jsfiddle.net/mK23N -> you have 1 more days
  • 我尝试设置一个等于 cdate.getTime 的新变量,然后解析该值并在 diff 变量中使用它,但每次我尝试该消息都不再显示
  • 今天的日期显示“你今天必须完成这项任务”,这很好,但是当我输入明天的日期 2013-03-20 时,它会显示相同的消息。

标签: javascript date parseint


【解决方案1】:

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

使用

 var days = Math.ceil(daysCal);

而不是 parseInt。

【讨论】:

    【解决方案2】:

    您应该注意new Date(year, month, day); 会为 0:00 AM 创建一个时间戳。

    所以那天发生的所有事情,都会有一个否定的diff(尽管&gt; -1)。所以你应该使用Math.ceil 而不是四舍五入。或者您将截止日期设置为 23:59:59(即将日期增加 1)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多