2012-11-13 34 views
0

我知道这已经覆盖了一下网上,但是我还是不太清楚如何不幸修改的代码,这个特殊的一块:在IE中显示为NaN的日期?

timeCreated: function(dateString) {  
    var date = new Date(dateString); 
    var monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; 

    var hh = date.getHours(); 
    var m = date.getMinutes(); 
    var dd = "AM"; 
    var h = hh; 

    if (h >= 12) { 
     h = hh-12; 
     dd = "PM"; 
    } 
    if (h == 0) { 
     h = 12; 
    } 

    return h + ':' + date.getMinutes().toString() + ' ' + dd + ' ' + monthNames[date.getMonth()] + ', ' + date.getDate().toString() + ', ' + date.getFullYear().toString(); 


} 

的dateString被输出为Tue Nov 06 23:29:33 +0000 2012

+2

我遇到了很多麻烦,我唯一找到的'安全'解决方案是给Date()提供年份,月份等的单个值。您可以使用'.split )'适当的日期字符串。你可以在[4th constructor example here](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date)中得到确切的语法。 – Marty

+0

@MartyWallace谢谢我会看看这些例子。 – muudless

+0

@YogendraSingh它在IE中输出为Nan。 – muudless

回答

2

您的输入日期格式与任何标准格式都不匹配,因此IE无法解析它,即无法构建正确的日期对象。

由于您的Date对象不正确构造,所有的方法调用,如date.getHours();date.getMinutes();正在返回NaN的。

如果以可接受的格式使用日期字符串,例如dateString =“Nov 06 2012 23:29:33 +0000”,它正常工作。

如果你想支持自定义格式的基础数据分析,看看 http://www.mattkruse.com/javascript/date/,其中有一个很大的自定义方法getDateFromFormat(val,format)任何日期字符串转换成特定格式的Date对象。请看看,看看是否有帮助。

+0

IE不支持[“标准”日期字符串](http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15),这是日期字符串的一个原因应该手动解析。您建议的日期字符串格式与ECMA-262不一致。 – RobG

+1

哦,我的天啊,这必须是一个残酷的笑话...... – itmuckel

0

什么是dateString的格式?

解析日期字符串的内置支持因浏览器而异,从差到糟糕。最好手动分析字符串以将其变成Date对象,然后从那里开始。如果您提供字符串格式,可以提供进一步的帮助。