首页
学习
活动
专区
圈层
工具
发布

南刊IE 11
EN

Stack Overflow用户
提问于 2014-04-02 08:32:12
回答 3查看 2.5K关注 0票数 0

我有以下的javascript

代码语言:javascript
复制
datefrom = new Date(event.min);

                           if (datefrom != 'Invalid Date') {

                               var day = datefrom.getDate();
                               var month = datefrom.getMonth() + 1; //Months are zero based
                               var year = datefrom.getFullYear();
                               var hour = datefrom.getHours();
                               var min = datefrom.getMinutes();

                               if (day < 10)
                                   day = "0" + day;
                               if (month < 10)
                                   month = "0" + month;
                               if (hour < 10)
                                   hour = "0" + hour;
                               if (min < 10)
                                   min = "0" + min;

                               datefrom = day + "/" + month + "/" + year + " " + hour + ":" + min;


                               $("#DateBox1").val(datefrom);
                           }
                           else {
                               alert('IM HERE!!!');
                               $("#DateBox2").val(originalFrom);
                           }

在使用Chrome和FireFox的应用程序时,我可以成功地进入else语句并发出警告:“!没有麻烦,因为datefrom是无效的日期。

然而,IE声明日期是从is NaN开始的,由于某种原因,我无法进入the语句。

我已经在if语句中放置了alrets,以查看我在运行时的位置,并且由于某些原因,我无法进入“否则”,并在IE中设置正确的值。为什么会发生这种事?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-02 08:48:50

它将有助于了解输入值是什么,但通常您需要注意,在使用内置Date对象时,存在许多已知的跨浏览器怪癖。在一个浏览器中成功解析为日期的字符串在另一个浏览器中可能不被视为有效。

其次,对"Invalid Date"的测试可能不是确定日期是否有效的最佳方法。我认为if(isNaN(datefrom.getDate()))可能是一个更好的测试。

最后,如果要解析日期字符串,您可能需要考虑使用第三方库之一,它可以使JS中的日期更容易使用。查找Date.jsMoment.js。这些库将为您提供更好的跨浏览器兼容性,以及标准日期对象中没有的附加功能。

票数 3
EN

Stack Overflow用户

发布于 2014-04-02 08:41:39

使用下面的行检查有效日期,而不是datefrom != 'Invalid Date'

代码语言:javascript
复制
if(datefrom.getTime === "function" && isFinite(datefrom.getTime()))
票数 1
EN

Stack Overflow用户

发布于 2014-04-02 11:43:09

您还没有说明event.min是什么,所以我们只能猜测可能导致错误的原因。

日期构造函数将返回日期对象或NaN,因此测试datefrom != 'Invalid Date'应该始终为真,因为在实现符合任何ECMAScript版本的情况下,new Date(...)永远不会返回字符串“无效日期”。

如果结果是NaN,则意味着构造函数无法根据ECMA-262中的规则从传递给它的任何内容中创建有效的date对象,这可能意味着它是一个值,在转换为原语时:

  1. 是一个字符串,当解析时,该字符串不会导致有效日期。
  2. 大于8.64e15的数字,因此超过了时间剪辑的允许值。

在第一种情况下,有些实现可以成功地解析许多字符串,而另一些实现则不能成功地解析这些字符串。还有一些字符串可以由两个实现成功地解析(例如,导致一个日期对象),但会导致不同的日期,例如,2014-03-24T20:20:00将由Chrome (正确)处理为UTC,而(错误地)由Firefox作为本地处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22805703

复制
相关文章

相似问题

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