我有一个日期选择器,通过它可以通过javascript获取日期。
var tmpEarTxt = document.getElementById('<%=txtEarDate.ClientID %>');
当我将日期增加30天时,mozilla浏览器会给出NaN-Nan-0NaN作为结果。但是,它的铬工作正常。这是我的代码:
var dtVal = new Date(tmpEarTxt.value);
dtVal.setDate(dtVal.getDate() + 30);
如何解决此问题?
答案 0 :(得分:0)
1-31范围之外的值作为Date#setDate
的参数是非法的。您可以改为使用Date#setTime
和Date#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
和引用的specification。
允许使用以下格式。第一个工作自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中测试过)
除了IE(在IE8,IE9,FF,Chrome中测试)之外,new Date("1995-12-25")
无处不在
new Date("12-25-1995")
适用于Chrome和IE,但不适用于Firefox。
此外,IE(但不是Chrome)允许日期和月份溢出,增加下一个最大的度量,但仅解析最后一种格式(未经MDN认可的格式)。它甚至让这一年降到1900以下。