【问题标题】:JavaScript setDate() returns Invalid DateJavaScript setDate() 返回无效日期
【发布时间】:2012-10-30 14:10:05
【问题描述】:

所以,我有这个代码:

$('#end_date').click(function() 
{
    var start_date = new Date($('#start_date').val());
    var duration = parseInt($('#duration').val());

    var end_date = new Date();
    end_date.setDate(start_date + duration);

    $('#end_date').val($.datepicker.formatDate('yy-mm-dd', end_date));
});

我认为应该从表单中获取开始日期,并在其中添加一些天数(持续时间),并在另一个文本字段中显示输出。但是,我得到的结果总是 NaN-NaN-NaN,或者如果我删除格式,则只是 Invalid Date。

但是:

$('#end_date').val($.datepicker.formatDate('yy-mm-dd', start_date));

工作得很好。所以我认为问题不在于第三行。而现在我很困惑。有没有办法解决这个问题?

【问题讨论】:

  • 好吧,我们就check the docs...
  • 我认为您将能够使用链接的文档来修复您的代码,但要注意另一个陷阱:使用 parseInt 时始终精确基数,因为 parseInt('09') 是 0。

标签: javascript jquery jquery-ui date


【解决方案1】:

setDate 只是设置月份的日期,您可以使用setFullYearsetMonth 或者您也可以这样做。

$('#end_date').click(function() 
{
    var start_date = new Date($('#start_date').val());
    var duration = parseInt($('#duration').val());

    var end_date = new Date();
    end_date.setDate(start_date.getMilliseconds() + duration.getMilliseconds());

    $('#end_date').val($.datepicker.formatDate('yy-mm-dd', end_date));
});

希望 start_Date 和 duration 返回毫秒数。

【讨论】:

  • 啊,是的,setMonth,应该改用它。谢谢!
  • 这不起作用 (i) duration 是一个数字,数字没有 .getMilliseconds (ii) .getMilliseconds 返回指定日期的毫秒部分,而不是 unix 纪元的毫秒数.
【解决方案2】:

根据this question,您应该尝试:

end_date.setDate(start_date.getDate() + duration);

【讨论】:

    【解决方案3】:

    由于setDate 只设置月份中的某一天,您可以这样做:

    var duration = parseInt($('#duration').val(), 10); // don't forget the radix!
    var end_date = new Date();
    end_date.setTime(start_date.getTime()); // makes end_date a copy of start_date
    end_date.setDate(start_date.getDate() + duration); // changes the day of the month (and recomputes months and years)
    

    【讨论】:

      【解决方案4】:
      $('#end_date').click(function() 
      {
          var start_date = new Date($('#start_date').val());
          var duration = parseInt($('#duration').val());
      
          var end_date = new Date();
          end_date.setTime(start_date.getTime() + (duration*24*60*60*1000));//convert duration to miliseconds
      
          $('#end_date').val($.datepicker.formatDate('yy-mm-dd', end_date));
      });
      

      这应该可行,将持续时间添加到 start_date 的时间并将该时间设置为 end_date

      【讨论】:

        猜你喜欢
        • 2011-07-26
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        • 2020-02-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多