我正在尝试用JavaScript构建一个小日历。我的日期在Firefox和Chrome中运行良好,但是在IE中,日期函数返回了NaN。
这是函数:
function buildWeek(dateText){ var headerDates=''; var newDate = new Date(dateText); for(var d=0;d<7;d++){ headerDates += '<th>' + newDate + '</th>'; newDate.setDate(newDate.getDate()+1); } jQuery('div#headerDates').html('<table><tr>'+headerDates+'</tr></table>'); }
dateText是当前星期的星期一,实际上是在php中以“ m,d,Y”格式设置的,例如"02, 01, 2010"。
dateText
"02, 01, 2010"
Date构造函数接受任何值。如果参数的原始[[value]]是数字,则创建的日期具有该值。如果原始[[value]]为String,则规范仅保证Date构造函数和parse方法能够解析Date.prototype.toString和Date.prototype.toUTCString()的结果。
设置日期的一种可靠方法是构造一个日期并使用setFullYear和setTime方法。
setFullYear
setTime
ECMA-262 r3没有定义任何日期格式。将字符串值传递给Date构造函数或Date.parse具有与实现相关的结果。最好避免。
编辑: 来自comp.lang.javascript常见问题解答的条目是:扩展ISO 8601本地日期格式YYYY-MM- DD可以通过Date以下方式解析为:
YYYY-MM- DD
Date
/**Parses string formatted as YYYY-MM-DD to a Date object. * If the supplied string does not match the format, an * invalid Date (value NaN) is returned. * @param {string} dateStringInRange format YYYY-MM-DD, with year in * range of 0000-9999, inclusive. * @return {Date} Date object representing the string. */ function parseISO8601(dateStringInRange) { var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/, date = new Date(NaN), month, parts = isoExp.exec(dateStringInRange); if(parts) { month = +parts[2]; date.setFullYear(parts[1], month - 1, parts[3]); if(month != date.getMonth() + 1) { date.setTime(NaN); } } return date; }