0

我有一个日期选择器,通过它我可以通过 javascript 获取日期。

var tmpEarTxt = document.getElementById('<%=txtEarDate.ClientID %>');

当我将日期增加 30 天时,Mozilla 浏览器会给出 NaN-Nan-0NaN 作为结果。但是,它在 chrome 中运行良好。这是我的代码:

var dtVal = new Date(tmpEarTxt.value);
dtVal.setDate(dtVal.getDate() + 30);

我该如何解决这个问题?

4

1 回答 1

0

1-31 范围之外的值作为 的参数是非法的Date#setDate。您可以使用Date#setTimeandDate#getTime代替:

var TI_DAY = 1000*60*60*24; //convenience constant; use any notation you like
///
var dtVal = new Date(tmpEarTxt.value);
dtVal.setTime(dtVal.getTime() + 30 * TI_DAY);

还要确保将正确的字符串传递给 Date 构造函数。有关有效格式的列表,请参阅Date.parse参考规范

允许使用以下格式。第一个从 ES1 开始工作,后者只从 ES5 开始工作(在 IE8 中测试的第 2 行和第 5 行,不支持):

Mon, 25 Dec 1995 13:30:00 GMT
1997-07-16T19:20:30.45+01:00
1997-07-16T19:20:30+01:00
1997-07-16T19:20+01:00
1997-07-16                    (year-month-day)
1997-07
1997

所以,只有new Date("25 Dec 1995")在任何地方都可以工作(在 IE8、IE9、FF、Chrome
new Date("1995-12-25")中测试)除了 IE(在 IE8、IE9、FF、Chrome 中测试)
new Date("12-25-1995")在 Chrome 和 IE 中有效,但在 Firefox 中无效。此外,IE(但不是 Chrome)允许日和月溢出,增加下一个最大的度量,但在解析最后一种格式(MDN 未认可的格式)时。它甚至让年份降至 1900 以下。

于 2013-02-19T08:03:24.050 回答