文本框中的JavaScript设置日期不一致

时间:2014-01-16 18:31:59

标签: javascript asp.net

我有几个文本框,用户通过按钮点击设置日期和日期,增加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日期,我就会遇到这个问题。任何人都可以建议我能在这方面保持一致吗?

由于

2 个答案:

答案 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]。