我有几个文本框,用户通过按钮点击设置日期和日期,增加7天,或者将7减去每个框中当前值的任何值。
首次加载页面时,添加到文本框中的日期取决于属于某个组的用户。因此,如果用户属于组A,则从日期是星期日,但如果用户属于组B,则它是星期五。我在ASP.Net页面中的页面加载事件中设置了这个逻辑。
令我困惑的是,虽然我可以设置日期,并让我的JavaScript与A组一起工作,如果将用户切换到B组,并点击按钮而不是期望日期从1月17日1月10日,它将跳至2014年12月29日。它似乎在2015年1月5日开始有了完全不同的价值。
我拥有的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));
}
正如我所说,一切都运作良好,当用户是一个组时,我得到了正确的日期,但是一旦我将用户更改为另一个组并设置初始的from和to日期,我就会遇到这个问题。任何人都可以建议我能在这方面保持一致吗?
由于
答案 0 :(得分:0)
这一行:
newfromdate.setDate(newfromdate.getDate() - 7)
看起来你想要回去一周。这将失败。 setDate仅更改日期。你能猜出当Day of Month少于7时会发生什么?
答案 1 :(得分:0)
您实例化fromDateIn
的方式存在问题。您传递的格式为dd/MM/yyyy
,但采用单个字符串值的日期构造函数依赖于区域设置,并将输入视为MM/dd/yyyy
。这会导致fromDateIn
的完全虚假值,导致其他所有内容失效。
您应该找到一种方法来确定开始日期的年,月和日(通过将其解析出文本框值或让ASPX逻辑以某种方式将其填充到页面中)。并使用new Date(year, month, day)
构造函数实例化日期。 (这需要记住month
是基于0的[即1月= 0,2月= 1]。