我得到了以下在Chrome中运行良好的代码:
function funLoad(str1,str3,str4)
{
var dym1 = str1.split("/");
var d=new Date();
var dym2 = d.getMonth() + 1 + " " + d.getDate() + " " + d.getFullYear() + " " + d.getHours() + ":" + d.getMinutes() + ":00";
//var dym2 = "6 10 2013 09:00:00";
var start = Date.parse(dym1[1] + " " + dym1[0] + " " + dym1[2] + " " + str3 + ":" + str4 + ":00");
var end = Date.parse(dym2);
return (start-end) / (1000*60*60);
}
$("#btn1").click(function(event){
alert(funLoad($("#txt1").val(),$("#ddlHourTime").val(),$("#ddlMinuteTime").val()));
});这是一个jsFiddle:http://jsfiddle.net/oshirowanen/QTVWd/6/
当我在IE8中运行它时,我只会收到NaN的警告。
发布于 2013-06-12 19:47:45
为了简单一点,这个错误是因为IE用来存储日期的格式与Chrome使用的格式不同(也是你用来手动解析和格式化日期的格式)。这是standard允许的,所要求的是浏览器能够解析自己产生的格式(参见§15.9.4.2)。
通常,直接使用日期格式并不是一个好主意,这不仅是因为浏览器特定的实现,而且是因为全球化(对于拥有虚拟世界受众的web应用程序来说尤其如此)。实际上,我的意思是永远不要做这样的事情(在this post中,我试着解释原因):
d.getMonth() + 1 + " " + d.getDate() + " " + d.getFullYear()或者这样:
d.getMonth() + 1 + "-" + d.getDate() + "-" + d.getFullYear()此规则的几个例外情况:
Date.parse()),因为它是区域设置和浏览器dependent.您确信每个浏览器(支持ECMAScript 5)都会读取的唯一格式是ISO8601 YYYY-MM-DDTHH:mm:ss.sssZ (请参阅§15.9.1.15),因此在您的情况下,您应该将自定义解析/格式更改为该格式。对于较老的浏览器,没有明确的规则(这就是为什么我们需要一个库)。该标准在§15.9.4.2中规定:
如果字符串不符合ISO8601格式,则函数可能会回退到任何特定于实现的试探法或特定于实现的日期格式。
(重点是我的)
看看SO上的this和this帖子,了解其他细节(或者this little tutorial上关于日期的帖子)。
如果您使用跨浏览器和跨语言环境的日期,我建议您使用一个好的库来抽象所有这些细节。我发现this one非常强大并且易于使用。如果你想要一个广泛使用的几乎完整的库,也可以看看moment.js。
https://stackoverflow.com/questions/17064540
复制相似问题