Javascript Date(dateString)在特定服务器和浏览器上返回NaN

Gag*_*ege 8 javascript iis internet-explorer date

我正在使用日期格式为"yyyy-mm-dd"的Javascript Date(字符串)构造函数.除非应用程序在运行IIS的测试VM上运行,否则构造函数在IE 9和Firefox中运行良好.如果它在VM上,在IE 9中它返回'NaN',但仍然在Firefox中正常工作.

    var dateAsString = "2011-11-09";
    var dateCreated = new Date(dateAsString);
Run Code Online (Sandbox Code Playgroud)

我假设服务器与客户端Javascript无关.有什么建议?

Wyt*_*tze 9

对于我们这些想知道如何用斜线替换连字符(又名破折号)的人:

new Date(dashToSlash(string));
Run Code Online (Sandbox Code Playgroud)

那使用这个功能:

function dashToSlash(string){
  var response = string.replace(/-/g,"/");
  //The slash-g bit says: do this more than once
  return response;
}
Run Code Online (Sandbox Code Playgroud)

在我的情况下,有选择地将连字符转换为斜线(仅在Date()函数需要的位置)要比在我的代码中的每个地方替换日期格式要容易得多.

注意:您确实需要定义一个单独的"响应"变量,并为其指定替换操作结果的值.如果不这样做,则Chrome中的字符串将保持不变.这不是一个大问题,因为Chrome开头的连字符日期字符串没有问题.但还是......


Lee*_*ski 8

如果可以,只需使用斜杠而不是连字符.


编辑:扩大澄清......

ISO 8601标准格式使用连字符作为日期分隔符.我的回答并不意味着你不需要遵循标准.如有必要,您只能为Date构造函数使用斜杠.


Jam*_*ill 2

我建议尝试一种更可靠的日期解析形式。下面的示例使用setFullYear(). IE 使用下面的代码会产生不同的结果吗?

/**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;
  }
Run Code Online (Sandbox Code Playgroud)

来源: http: //jibbering.com/faq/#parseDate