`
冷寒冰
  • 浏览: 251515 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

new Date(myDateString)在IE中输出NaN,在火狐和谷歌浏览器中正常

 
阅读更多
今天在工作中遇到这样一个问题:使用jquery ui的datepicker日历控件,获取选中的日期,并且要将日期转换成日期对象格式,如:Tue Nov 30 00:00:00 UTC+0800 2010,以便与其他代码对接。

我的代码如下:
$("#mydate").datepicker({
        showOn: "button",
        buttonImage: "images/calendar.gif",
        buttonImageOnly: true,
        buttonText:"日历",
        onSelect:function(dateText,inst){
                alert(dateText);
                //dateText:"2014-04-23"
                r = new Date(dateText);
                alert(r);
                ...do something...
        }
}


我要实现的效果是:当点击日历控件,选中日期时,获取当前日期,并转换日期格式赋值给变量r,用于后面更复杂的工作。

我们知道,jaascript用来创建一个日期对象,返回当前的日期和时间,直接使用new Date,如:
var date = new Date();
alert(date);


输出的是当前日期和时间,格式为:Tue Nov 30 00:00:00 UTC+0800 2010。直接可以使用在项目中,而且在IE和火狐上都正常。

可是,如果是new Date()接收外部传来的参数如我使用datepicker中用到new Date(dateText)。这个时候用火狐和谷歌浏览器测试,能正常输出日期格式为:Tue Nov 30 00:00:00 UTC+0800 2010。但是在IE7上就杯具了,IE7输出的结果为:NaN。
我们可以借鉴fullcalendar中的一个日期函数,而不要直接调用js中原生态的new Date(),
  function parseISO8601(s, ignoreTimezone) { // ignoreTimezone defaults to false
            // derived from http://delete.me.uk/2005/03/iso8601.html
            // TODO: for a know glitch/feature, read tests/issue_206_parseDate_dst.html
            var m = s.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/);
            if (!m) {
                return null;
            }
            var date = new Date(m[1], 0, 1);
            if (ignoreTimezone || !m[13]) {
                var check = new Date(m[1], 0, 1, 9, 0);
                if (m[3]) {
                    date.setMonth(m[3] - 1);
                    check.setMonth(m[3] - 1);
                }
                if (m[5]) {
                    date.setDate(m[5]);
                    check.setDate(m[5]);
                }
                fixDate(date, check);
                if (m[7]) {
                    date.setHours(m[7]);
                }
                if (m[8]) {
                    date.setMinutes(m[8]);
                }
                if (m[10]) {
                    date.setSeconds(m[10]);
                }
                if (m[12]) {
                    date.setMilliseconds(Number("0." + m[12]) * 1000);
                }
                fixDate(date, check);
            } else {
                date.setUTCFullYear(
            m[1],
            m[3] ? m[3] - 1 : 0,
            m[5] || 1
        );
                date.setUTCHours(
            m[7] || 0,
            m[8] || 0,
            m[10] || 0,
            m[12] ? Number("0." + m[12]) * 1000 : 0
        );
                if (m[14]) {
                    var offset = Number(m[16]) * 60 + (m[18] ? Number(m[18]) : 0);
                    offset *= m[15] == '-' ? 1 : -1;
                    date = new Date(+date + (offset * 60 * 1000));
                }
            }
            return date;
        }
        function fixDate(d, check) { // force d to be on check's YMD, for daylight savings purposes
            if (+d) { // prevent infinite looping on invalid dates
                while (d.getDate() != check.getDate()) {
                    d.setTime(+d + (d < check ? 1 : -1) * HOUR_MS);
                }
            }
        }

不难看出,代码能将格式为“2010-11-26”的日期转换为:“Fri Nov 26 00:00:00 UTC+0800 2010 ”的格式。于是,在我的代码中直接调用这个函数处理下就OK。最终代码:
$("#mydate").datepicker({
        showOn: "button",
        buttonImage: "images/calendar.gif",
        buttonImageOnly: true,
        buttonText:"日历",
        onSelect:function(dateText,inst){
                alert(dateText);
                var r = parseISO8601(dateText); //转换格式
                alert(r);
                ...do something...
        }
}

分享到:
评论

相关推荐

    在IE浏览器显示NaN

    解决new Date()在IE中出现NaN的字符。详细解决方案代码见.txt文件中。

    new Date()问题在ie8下面的处理方法

    综上所述,当在IE8中使用`new Date()`时,开发者需要考虑到上述兼容性和特性的差异,确保代码在所有目标浏览器中都能正常运行。在开发过程中,使用像Babel这样的工具将ES6+代码转换为IE8兼容的ES5语法也是个好选择,...

    关于js new Date() 出现NaN 的分析

    在IE浏览器中,发现一个特殊情况:当`new Date()`无法正确解析字符串格式的日期时,它返回的日期对象在调试器中显示为`NaN`。然而,这个`NaN`实际上并不是真正的`NaN`类型,而是一个特殊的日期对象,该对象在调用...

    java中 new date() 打印出的时间与系统时间错了八小时的解决方法

    在Java编程中,`new Date()` 用于创建一个表示当前日期和时间的对象。然而,有时候开发者可能会遇到这样一个问题:使用 `new Date()` 输出的时间与系统的实际时间相差了八个小时。这种情况通常是由时区(TimeZone)...

    微信小程序new Date()方法失效问题解决

    在微信小程序开发中,`new Date()`方法是用于创建日期对象的关键方法,但在某些情况下可能会出现失效的问题,尤其是在特定的移动设备或操作系统上。根据给出的文件信息,可以了解微信小程序中`new Date()`方法失效的...

    JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)

    然而,不同的浏览器实现可能在解析日期字符串时存在差异,这在Firefox和IE浏览器中尤其明显,因为它们对日期格式的解析规则有所不同,导致在某些情况下,使用new Date(str)在IE中可能返回一个无效的日期对象。...

    Javascript在IE和FireFox中的兼容处理

    以上只是JavaScript在IE与Firefox中兼容性问题的一部分,实际开发中可能遇到更多细节。解决这些问题需要对两种浏览器的特性有深入理解,并使用条件注释、polyfills和现代JavaScript库(如jQuery)来确保代码在各种...

    javascript中IE浏览器不支持NEW DATE()带参数的解决方法

    例如,代码`var date1 = new Date(dateTimes[z][1])`在Firefox下可以正常工作,但在IE7下却失败了。这是因为不同的浏览器对日期字符串解析的标准支持不同。IE7可能不支持按照预期方式解析包含日期和时间的字符串,而...

    js在火狐和IE浏览器的差异.zip

    本文件“js在火狐和IE浏览器的差异.zip”着重讨论了JavaScript在Mozilla Firefox(火狐)与Internet Explorer(IE)之间的区别,以下是对这些差异的详细阐述: 1. **DOM操作差异**: - Firefox和IE对Document ...

    JS日期选择器(兼容IE,FireFox,Oprea,chrome等主流浏览器)

    这个组件的目标是确保在不同浏览器如Internet Explorer(IE)、Firefox、Opera和Chrome等上都能正常工作。 在JavaScript中,处理日期和时间通常涉及到内置的Date对象,但不同的浏览器可能对Date对象的某些方法或...

    java 时间转换date time = new date()

    根据给定文件的信息,我们可以总结出以下几个重要的Java时间处理知识点: ### 1. Java日期与时间的基本操作 #### 1.1 创建当前日期与时间...掌握了这些内容,就可以较为熟练地在Java程序中处理各种日期和时间问题了。

    Javascript的IE和Firefox兼容性问题集合

    以上只是JavaScript在IE和Firefox之间兼容性问题的一部分,实际开发中可能还会遇到更多细节问题。解决这些问题通常需要深入理解各浏览器的差异,并结合条件判断、库或框架等技术手段来实现跨浏览器的代码。在编写...

    JAVA new Date()或Calendar.getInstance().getTime()得到的时间不对

    在Java编程中,`new Date()` 和 `Calendar.getInstance().getTime()` 都是获取当前系统时间的方法,但有时可能会出现获取到的时间与预期不符的情况。这种问题通常与时区设置、系统时间、Java运行环境以及代码逻辑...

    日期控件(支持火狐和IE)

    在给定的标题“日期控件(支持火狐和IE)”中,我们可以理解到这是一个专为Firefox和Internet Explorer(IE)浏览器设计的日期选择器。在过去的Web开发中,由于浏览器之间的兼容性问题,实现跨浏览器的日期控件是一...

    js中获取时间new date()的用法.txt

    ### JavaScript 中 new Date() 方法详解 #### 一、概述 在JavaScript编程语言中,`Date`对象被用来处理日期和时间。通过`new Date()`构造函数可以创建一个表示特定时间的`Date`对象实例,该实例可以是当前时间或者...

    IE和Firefox的Javascript兼容性总结.docx

    JavaScript 兼容性问题在开发跨浏览器的网页应用时至关重要,尤其是针对IE和Firefox这两个具有显著差异的浏览器。本文将详细探讨这些差异,并提供相应的兼容性处理方案。 首先,我们来看函数和方法的差异。在...

    Chrome谷歌浏览器源码分析

    Chrome谷歌浏览器源码分析 Chrome浏览器是全球最受欢迎的网络浏览器之一,其强大的性能、安全性和易用性得益于其先进的设计理念和高效的技术实现。本篇将深入探讨Chrome的核心组件——渲染引擎(Rendering Engine)...

Global site tag (gtag.js) - Google Analytics