首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >日期函数在IE8中不起作用

日期函数在IE8中不起作用
EN

Stack Overflow用户
提问于 2013-06-12 19:39:41
回答 2查看 2.5K关注 0票数 2

我得到了以下在Chrome中运行良好的代码:

代码语言:javascript
复制
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的警告。

EN

Stack Overflow用户

发布于 2013-06-12 19:47:45

为了简单一点,这个错误是因为IE用来存储日期的格式与Chrome使用的格式不同(也是你用来手动解析和格式化日期的格式)。这是standard允许的,所要求的是浏览器能够解析自己产生的格式(参见§15.9.4.2)。

通常,直接使用日期格式并不是一个好主意,这不仅是因为浏览器特定的实现,而且是因为全球化(对于拥有虚拟世界受众的web应用程序来说尤其如此)。实际上,我的意思是永远不要做这样的事情(在this post中,我试着解释原因):

代码语言:javascript
复制
d.getMonth() + 1 + " " + d.getDate() + " " + d.getFullYear()

或者这样:

代码语言:javascript
复制
d.getMonth() + 1 + "-" + d.getDate() + "-" + d.getFullYear()

此规则的几个例外情况:

  • 您正在为最终用户格式化该字符串(仅限如果您不关心她日期格式,请注意,通过该代码,您假定MDY顺序和特定的separator).
  • You'll自己使用该字符串,并且您将使用另一个手动解析器(您不会使用Date.parse()),因为它是区域设置和浏览器dependent.
  • You're编写的您自己的库来管理日期。

您确信每个浏览器(支持ECMAScript 5)都会读取的唯一格式是ISO8601 YYYY-MM-DDTHH:mm:ss.sssZ (请参阅§15.9.1.15),因此在您的情况下,您应该将自定义解析/格式更改为该格式。对于较老的浏览器,没有明确的规则(这就是为什么我们需要一个库)。该标准在§15.9.4.2中规定:

如果字符串不符合ISO8601格式,则函数可能会回退到任何特定于实现的试探法或特定于实现的日期格式

(重点是我的)

看看SO上的thisthis帖子,了解其他细节(或者this little tutorial上关于日期的帖子)。

如果您使用跨浏览器和跨语言环境的日期,我建议您使用一个好的库来抽象所有这些细节。我发现this one非常强大并且易于使用。如果你想要一个广泛使用的几乎完整的库,也可以看看moment.js

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17064540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档