JavaScript setDate()返回无效日期

时间:2012-10-30 14:10:05

标签: javascript jquery jquery-ui date

所以,我有这段代码:

$('#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,或者如果我删除格式,则只是无效日期。

但是:

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

工作得很好。所以我不认为问题出在第3行。现在我很困惑。任何解决此问题的指针?

4 个答案:

答案 0 :(得分:2)

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返回毫秒。

答案 1 :(得分:1)

根据this question,您应该尝试:

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

答案 2 :(得分:0)

由于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)

答案 3 :(得分:0)

$('#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