2014-01-16 26 views
0

我有幾個文本框,用戶從一個按鈕點擊開始設置日期和日期,該按鈕點擊將7天或減法7添加到每個框中的當前值。在文本框中的JavaScript設置日期不一致

第一次加載頁面時,添加到文本框中的日期基於屬於組的用戶。因此,如果用戶屬於組A,則起始日期是星期日,但是如果用戶屬於組B,則它是星期五。這個邏輯我在ASP.Net頁面的頁面加載事件中設置。

讓我感到困惑的情況是,雖然我可以設置日期,並讓我的JavaScript與A組一起工作,但如果將用戶切換到B組,並且單擊某個按鈕而不是期望更改日期從1月17日1月10日,它跳躍到12月29日2014年這似乎是得到一個完全不同的值最初1月5日到2015年

JavaScript的我已經是:

var fromDateIn = new Date(formatDate(document.getElementById('<%=txtFromDate.ClientID%>').value)); 
var newfromdate = new Date(fromDateIn); 

在按鈕事件之一,我有:

function setNewFromDate() { 
    newfromdate.setDate(newfromdate.getDate() - 7); 
    document.getElementById('<%= txtFromDate.ClientID%>').value = formatDate(newfromdate); 
    var toDate = new Date(newfromdate); 
    document.getElementById('<%= txtToDate.ClientID%>').value = formatDate(toDate.setDate(toDate.getDate() + 6)); 
} 

正如我所說的,一切都很完美,當用戶是一個羣組時,我得到了正確的日期,但是儘快將用戶更改爲另一個羣組並將初始日期設置爲日期,我就會遇到此問題。任何人都可以請建議我可以得到一致性呢?

感謝

+0

你應該嘗試使用momentjs做你的日期和時間的東西。幫助所有的邊緣情況。 – Oak

+0

您是否嘗試過在調試器中查看變量值?你確定'formatDate()'產生一個可以正確轉換成Date對象的值嗎?我懷疑'fromDateIn'沒有你期望的值,並且它拋棄了其他的東西。您是否驗證過您的'formatDate()'函數(您沒有向我們顯示,BTW)是專爲處理毫秒值輸入而設計的? – JLRishe

+0

我只是用alert()框做的,這是我看到5/01/2015的地方,但在文本框中顯示的是17/01/2014。所以我不能看到新的價值來自哪裏 – Andy5

回答

0

實例化fromDateIn的方式存在問題。您正在以格式dd/MM/yyyy格式傳遞該值,但採用單個字符串值的日期構造函數與語言環境相關,並將輸入視爲MM/dd/yyyy。這會導致fromDateIn的完全虛假值,從而導致其他情況。

您應該找到一種方法來確定開始日期的年,月和日(通過解析出文本框的值或讓ASPX邏輯以某種方式將其填入頁面中)。並使用new Date(year, month, day)構造函數實例化日期。 (這要求記住month是基於0的[即1月= 0,2月= 1])。

0

這條線:

newfromdate.setDate(newfromdate.getDate() - 7) 

看起來像你想一個星期回遷。這將失敗。 setDate僅更改月份的日期。你能猜到當月的日月少於7時會發生什麼嗎?

+0

它會做他希望做的事 - 將日期移回7天。 – JLRishe

+0

JLRishe是正確的getDate() - 7每次移回一個星期,並且該方法處理月份。如果你閱讀我的問題,這個設置工作正常。通過將用戶更改爲新組,我看不出有什麼不同 – Andy5

相關問題