2014-09-29 48 views
0

我有應該一個星期添加到窗體日期並將其存儲形式爲下一次用戶點擊該鏈接加入JavaScript天到給定日期

function changeDate() 
{ 
    var start = document.getElementById('start_date').value; 
    var d = 7; 
    var myDate=new Date(start); 
    myDate.setDate(myDate.getDate()+parseInt(d)); 
    document.getElementById('start_date').value = (myDate.getFullYear()) + '-' + (myDate.getMonth()+1) + '-' + (myDate.getDate()); 
} 

我的表格下面的JavaScript函數看起來是這樣的

<?php 
    $start_date = "2014-09-20"; 
?> 
<form name="myForm" method="post"> 
<input type="text" name="start_date" id="start_date" value="<?php echo $start_date?>"/> 
<a href="#" onclick="changeDate();">Next</a> 
</form> 

這個腳本作品每個用戶點擊超鏈接「下的」時間精細遞增一個星期,問題與一個月邊界發生。當日期爲「2014-09-27」時,腳本會正確計算下一個日期並顯示「2014-10-04」。當下次點擊發生問題時,一旦下一次腳本失敗,月份發生改變。我不明白爲什麼,我試着提醒start_date,它是正確的「2014-10-04」,但是一旦執行新的Date命令,它會返回一個無效的日期。

奇怪的是,它不會在月份邊界上失敗(這實際上得到正確計算),但它在下一次失敗。我認爲它可能與當前月份有關,但無關緊要,如果我將start_date設置爲「2014-11-03」,它將繼續正確添加,直到顯示日期「2014-12-01」,但是將在下一次失敗。

任何幫助是極大的讚賞

回答

1

您的問題是,瀏覽器期望2014-09-272014-9-27 instend。

這將解決這個問題:

function padNumber(num, length) { 
var str = num + ""; 
while (str.length < length) { 
    str = "0" + str; 
} 
return str; 
} 

function changeDate() 
{ 
    var start = document.getElementById('start_date').value; 
    var d = 7; 
    var myDate=new Date(start); 
    myDate.setDate(myDate.getDate()+parseInt(d)); 

    document.getElementById('start_date').value = (myDate.getFullYear()) + '-' + padNumber(myDate.getMonth()+1, 2) + '-' + padNumber(myDate.getDate(), 2); 
} 

一個更好的辦法來天添加日期是:

function addDays(date, days) { return new Date( date.getFullYear(), date.getMonth(), date.getDate() + days, date.getHours(), date.getMinutes(), date.getSeconds() % 60, date.getMilliseconds()); }

的時間操作更好的方法是http://momentjs.com/

+0

+1,moment.js是甜蜜的。 – Amadan 2014-09-30 03:31:25

+0

我剛剛用'new Date(「2014-9-27」)''進行了測試。 Chrome和Node接受它,Firefox和IE10則不接受。 – dusky 2014-09-30 07:14:48

1

一個日期加上一個星期,簡化爲:

var oneWeekFromMyDate = new Date(myDate.getTime() + 7 * 24 * 60 * 60 * 1000); 

它不閏秒,夏令開關和其他日曆干擾工作,雖然。

編輯:

function changeDate() 
 
{ 
 
    var start = document.getElementById('start_date').value; 
 
    var d = 7; 
 
    var myDate=new Date(start); 
 
    myDate.setDate(myDate.getDate()+parseInt(d)); 
 
    document.getElementById('start_date').value = (myDate.getFullYear()) + '-' + (myDate.getMonth()+1) + '-' + (myDate.getDate()); 
 
}
<form name="myForm" method="post"> 
 
<input type="text" name="start_date" id="start_date" value="2014-11-03"/> 
 
<a href="#" onclick="changeDate();">Next</a> 
 
</form>

如果失敗了你,你可以指定什麼「故障」是指:至於你的解決方案,它實際上沒有我的電腦上運行流暢?它變成一個隨機的其他日期,它打破並顯示控制檯中的錯誤消息,它爆炸在你的後院牛?

+0

我試過使用毫秒像你的解決方案和getTime而不是getDate,仍然是同樣的問題,直到月份更改並失敗 – 2014-09-29 07:41:38

+0

由失敗我的意思是var myDate返回「無效日期」,如果我alert(myDate),因此試圖獲得NaN的年或月失敗的日期 – 2014-09-29 08:08:32

+0

如果你運行你的代碼,它會在11月份成功,它會給出12月1日的適當日期,然後開始給出無效日期,只需要通過月,直到它改變,然後「下一次」它會給無效的日期 – 2014-09-29 08:11:27