IE 11中的Nan问题

时间:2014-04-02 08:32:12

标签: javascript jquery if-statement internet-explorer-11

我有以下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语句并提醒#34;!M HERE !!!&#34;没有麻烦,因为datefrom是无效的日期。

然而,IE声明日期为NaN,由于某种原因,我无法进入else语句。

我已将alrets置于if语句中,以查看我在运行时的位置,并且由于某种原因我无法进入else并在IE中设置正确的值。为什么会这样?

3 个答案:

答案 0 :(得分:3)

知道输入值是什么会有所帮助,但一般来说,在使用内置Date对象时,需要注意有许多已知的跨浏览器怪癖。在一个浏览器中成功解析为日期的字符串在另一个浏览器中可能不会被视为有效。

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

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

答案 1 :(得分:1)

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

if(datefrom.getTime === "function" && isFinite(datefrom.getTime()))

答案 2 :(得分:0)

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

Date构造函数将返回Date对象或NaN,因此测试datefrom != 'Invalid Date'应始终为true,因为new Date(...)永远不会返回字符串&#39; Invalid Date&#39 ;其中实现符合任何版本的ECMAScript。

如果结果是NaN,则意味着构造函数无法根据ECMA-262中的规则从传递给它的任何内容创建有效的日期对象,这可能意味着它&#39 ; sa值,当转换为基元时:

  1. 是一个字符串,在解析时,不会产生有效日期
  2. 是一个大于8.64e15的数字,因此超过了时间片段的允许值
  3. 在第一种情况下,有许多字符串可以被某些实现成功解析,但不能被其他实现解析。还有两个实现可以成功解析(即导致Date对象)的字符串但是导致不同的日期,例如2014-03-24T20:20:00将被Chrome视为(正确)为UTC,但(错误地)为Firefox本地。