一尘不染

日期构造函数在IE中返回NaN,但在Firefox和Chrome中有效

javascript

我正在尝试用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"


阅读 281

收藏
2020-04-25

共1个答案

一尘不染

Date构造函数接受任何值。如果参数的原始[[value]]是数字,则创建的日期具有该值。如果原始[[value]]为String,则规范仅保证Date构造函数和parse方法能够解析Date.prototype.toString和Date.prototype.toUTCString()的结果。

设置日期的一种可靠方法是构造一个日期并使用setFullYearsetTime方法。

ECMA-262 r3没有定义任何日期格式。将字符串值传递给Date构造函数或Date.parse具有与实现相关的结果。最好避免。


编辑: 来自comp.lang.javascript常见问题解答的条目是:扩展ISO 8601本地日期格式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;
  }
2020-04-25