【问题标题】:Calculate end date from month and start date JQuery从月份和开始日期JQuery计算结束日期
【发布时间】:2014-05-29 03:43:39
【问题描述】:

我有一个函数,我从开始日期和月份(任期)计算结束日期。 前任。我有开始日期2014-05-05 并添加 1 个月,然后它应该显示2014-06-05。这对我来说是正确的。 但是如果我添加2014-02-01 那么它显示2014-03-01 这是错误的。它应该显示2014-02-28

以下是我的功能:

function getEndDate() {
    var start_date = $("#start_date").val();
    var tenure = $("#tenure").val();

    if (/^\d{4}\-\d{2}\-\d{2}$/i.test(start_date)) {

        var parts = start_date.split("-");
        var year = parts[0] && parseInt(parts[0], 10);
        var month = parts[1] && parseInt(parts[1], 10);
        var day = parts[2] && parseInt(parts[2], 10);
        var duration = parseInt(tenure, 10);

        if (day <= 31 && day >= 1 && month <= 12 && month >= 1) {
            var expiryDate = new Date(year, month+duration, day);
            expiryDate.setFullYear(expiryDate.getFullYear());

            day = ('0' + expiryDate.getDate()).slice(-2);
            month = ('0' + (expiryDate.getMonth())).slice(-2);
            year = expiryDate.getFullYear();

            $("#end_date").val(year + "-" + month + "-" + day);

        } else {
            // display error message
        }
    }
}

请告诉我哪里出错了。

【问题讨论】:

  • 除非您这样做是为了学习,否则您可能需要查看 moment 库。 momentjs.com 它内置了所有的日期信息,而且你可以看到他们是如何计算它的。
  • 我不明白你的用例。如果将一个月添加到 2014-05-05 应该正确地产生 2014-06-05,那么对我来说,在逻辑上添加一个月到 2014-02-01 应该正确地产生 2014-03-01。如果您要说“一个月前的一天”(在后一种情况下确实是 2014-02-28),那么前一种情况应该产生 2014-06-04,而不是 2014-06-05。
  • @Paul:它应该知道特定月份的日期。例如。 2 月只有 28 或 29 天。
  • 我在 .NET 中运行了您的模拟,只是为了看看它会返回什么,它在您的第二个用例中显示 2014 年 3 月 1 日。 dotnetfiddle.net/gdvROt 然后我使用同样计算 2014 年 3 月 1 日的 momentjs 库运行它。 plnkr.co/edit/c0Gfqi6c7pSMkXTaSUZS?p=preview
  • 我更新了我的帖子。请检查

标签: javascript jquery date


【解决方案1】:

当你添加日期最简单的方法是求和毫秒,就像我之前做的例子一样,或者像这样操作日期对象:

date = new Date(); //current date
future_date = new Date(date.getYear(), date.getMonth() + 1, date.getDay(), date.getHours(), date.getMinutes(), date.getSeconds());


//date -> Wed May 28 2014 21:43:52 GMT+0200 (CEST)    
//future_date -> Sun Jun 03 114 21:43:52 GMT+0200 (CEST)

【讨论】:

  • 1 个月等于 31 天?如果我们用月份来讨论,那么使用月份总是更好的方法,因为它考虑了给定月份的天数。
  • @Ankit Jaiswal - 很好,在我的示例中,我只是假设最终用户会根据该特定月份的天数调整天数。无论如何,我已经按照您的建议修改了脚本。
  • 您更新了代码,但描述仍然相同。 :)
  • @AnkitJaiswal 是的,对不起!我有点分心.. :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 2020-08-21
  • 2014-03-02
  • 1970-01-01
  • 2020-12-17
相关资源
最近更新 更多