1

我有以下格式的时间戳:

[yyyy-MM-ddThh:mm:ssZ](例如:2015-05-15T03:34:17Z)

我想将此时间戳解析为日期,格式如下:[Fri May 15 2015 09:04:17 GMT +5:30]:

现在,我使用以下代码进行解析,它在 Firefox 3.6+ 浏览器中运行良好。但问题是,它在 Internet Explorer (IE) 8 中不起作用,在 IE 中它返回 'NaN'

我的 Javascript 代码是:

var myDate = new Date(timestampDate); 
//In Firefox i get myDate as Date object and i can get day, month and year. But in IE this myDate value is coming as NaN

var day = myDate.getDate();
var month = myDate.getMonth();
var year = myDate.getFullYear();

任何帮助都会得到回报。请给我一个解决方案,让它在 IE 中也能正常工作。

4

3 回答 3

1

yyyy-MM-ddThh:mm:ssZ是一个ISO 日期。浏览器不能很好地支持它们,例如 FireFox 不解析2015-05-15T03:34:17+01

在创建日期之前,您必须手动从字符串中提取元素。

于 2012-04-24T09:13:17.727 回答
1
(function(){
    //if the browser correctly parses the test string, use its native method.
    var D= new Date('2011-06-02T09:34:29+02:00');

    if(D && +D=== 1307000069000) Date.fromISO= function(s){
        return new Date(s);
    };
     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]){
            //extract the y-m-d h:m:s.ms digits:
            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; //adjust month
            //create the GMT date:
            day= new Date(Date.UTC.apply(Date, day));
            if(!day.getDate()) return NaN;
            if(p[5]){
                // adjust for the timezone, if any:
                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;
    }
})();

//测试警报(Date.fromISO("2015-05-15T03:34:17Z").toUTCString())

于 2012-04-24T13:24:51.693 回答
0

我有同样的问题,发现这个,假设你使用 jQuery UI:

$.datepicker.parseDate('yy-mm-dd', '2014-02-14');

这是 UI Datepicker 的一个有用方法。我正要编写自己的日期解析器以使我的代码独立于 jqui,但它可能对其他人有所帮助,所以我将这个答案留在这里。

于 2014-01-23T14:04:29.560 回答