2012-10-30 40 views
1

所以,我有這樣的代碼:的JavaScript的setDate()返回無效的日期

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

的作品就好了。所以我不認爲問題在於第三行。現在我困惑了。任何指針來解決這個問題?

+4

好吧,我們只需[檢查文檔](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/日期/ setDate)... – Blazemonger

+0

我認爲你可以使用鏈接的文檔來修復你的代碼,但要注意另一個缺陷:在使用[parseInt](https://developer.mozilla.org/en -US/docs/JavaScript/Reference/Global_Objects/parseInt),因爲'parseInt('09')'爲0. –

回答

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和持續時間返回毫秒。

+0

ahh yeah,setMonth,應該使用它。謝謝! – Furunomoe

+1

這不起作用(i)持續時間是一個數字,數字沒有'.getMilliseconds'(ii)'.getMilliseconds'返回指定日期的毫秒部分,而不是從unix時期開始的毫秒數。 –

0

你可以使用.getDate()當前日期,添加天數,並設置回用.setDate()。該setDate()功能翻轉幾個月和幾年自動:)下面是一個例子:

var start_date = new Date("2011-01-01"); 
var duration = parseInt("180", 10); 
var end_date = new Date(); 
end_date.setTime(start_date.getTime());   // end date now has same date value as start_date 
               // remember: end_date = start_date will give you undesired results! 
end_date.setDate(end_date.getDate() + duration); // add duration days 
console.log(end_date.toDateString());   // Thu Jun 30 2011 
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) 
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

相關問題