当前位置: 首页 > 面试题库 >

IE7 / IE8中的Javascript JSON日期解析返回NaN

井疏珂
2023-03-14
问题内容

我正在解析JSON事件供稿中的日期-但日期在IE7 / 8中显示为“ NaN”:

// Variable from JSON feed (using JQuery's $.getJSON)
var start_time = '2012-06-24T17:00:00-07:00';

// How I'm currently extracting the Month & Day
var d = new Date(start_time);
var month = d.getMonth();
var day = d.getDate();

document.write(month+'/'+day);// "6/24" in most browsers, "Nan/Nan" in IE7/8

我究竟做错了什么?谢谢!


问题答案:

在较旧的浏览器中,您可以编写一个函数来为您解析字符串。

这将创建一个Date.fromISO方法-如果浏览器可以从ISO字符串本地获取正确的日期,则使用该本地方法。

一些浏览器部分正确,但返回了错误的时区,因此仅检查NaN可能不会。

Polyfill:

(function(){
    var D= new Date('2011-06-02T09:34:29+02:00');
    if(!D || +D!== 1307000069000){
        Date.fromISO= function(s){
            var day, tz,
            rx=/^(\d{4}\-\d\d\-\d\d([tT ][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/,
            p= rx.exec(s) || [];
            if(p[1]){
                day= p[1].split(/\D/);
                for(var i= 0, L= day.length; i<L; i++){
                    day[i]= parseInt(day[i], 10) || 0;
                };
                day[1]-= 1;
                day= new Date(Date.UTC.apply(Date, day));
                if(!day.getDate()) return NaN;
                if(p[5]){
                    tz= (parseInt(p[5], 10)*60);
                    if(p[6]) tz+= parseInt(p[6], 10);
                    if(p[4]== '+') tz*= -1;
                    if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz);
                }
                return day;
            }
            return NaN;
        }
    }
    else{
        Date.fromISO= function(s){
            return new Date(s);
        }
    }
})()

结果:

var start_time = '2012-06-24T17:00:00-07:00';
var d =  Date.fromISO(start_time);
var month = d.getMonth();
var day = d.getDate();

alert(++month+' '+day); // returns months from 1-12


 类似资料:
  • 问题内容: 我想在IE7和IE8中实现框阴影。我已经尝试了一切而没有成功。这是我用来将彩色阴影应用于div的css: 这个ie-css3.htc文件是IE影子问题的解决方案。但这只会产生黑色阴影,而不会产生彩色阴影。我试过了: 但是它会产生定向阴影,而我想要一个全向阴影。也尝试过模糊滤镜,但它需要具有其他div,这在我当前的情况下是不建议的。关于这个问题有专家意见吗? 问题答案: 使用CSS3PI

  • 问题内容: 我正在尝试解析由tar生成的时间戳,例如“ 2011-01-19 22:15”,但无法计算出time.Parse的时髦API。 以下产生“解析时间“ 2011-01-19 22:15”:超出范围的月份” 问题答案: 请遵循Go 时间包文档中的说明。 布局中使用的标准时间为: 2006年1月2日星期一1:04:05 MST(MST是GMT-0700) 现在是Unix时间。(将其视为。)要

  • 问题内容: 哪里是。 当我执行以上操作时,时间变成 我在做错什么?这是一个错误吗?我希望它是2013年的第一周,而不是最后一周。 问题答案: 看这里。 该weekyear,模式字母的,周是为了与使用,weekyear。从javadoc的 将模式更改为 然后您将解析为 根据您的情况,2013年的第一周始于2012年。

  • 问题内容: 请像我在golang中帮助我解析日期 我正在尝试布局 但是编译器说 问题答案: 包装时间 导入“时间” [布局]参考时间可以认为是 使用,而不是。 例如, 游乐场:https : //play.golang.org/p/Xr8zaTjODgC 输出:

  • 问题内容: 如何将以下内容转换为日期以插入/更新到MySQL中的or 字段? 用于格式化日期,但不能反之。 问题答案: 您可能要使用该功能。这是函数的逆函数。 STR_TO_DATE(str,format) 这是函数的逆函数。它需要一个字符串和一个格式字符串。如果格式字符串同时包含日期和时间部分,则返回一个值;如果格式字符串仅包含日期或时间部分,则返回一个或值。如果从中提取的日期,时间或日期时间值

  • 我试图以C#为目标,使用Antlr4解析一个日期。在我的情况下,有效日期应具有以下内容 采用格式 年份只能有4位数字 月和日只能有2位 我知道类似的问题已经出现了,但它们的解决方案似乎对我不起作用 如何创建将解析日期的antlr4语法 ANTLR:识别日期和数字的最简单方法? 我在某个地方读到过,有一种类似优先级的解析,其中基于语法文件如何编写的顶级规则首先被评估。因此,考虑一下,除了日期,我的语