编程语言
首页 > 编程语言> > ISO8061的Javascript时间戳

ISO8061的Javascript时间戳

作者:互联网

从iso8061日期获取时间戳时,我遇到了一个问题.
由于某种原因,它在Chrome中可以正常运行,但在Firefox中会导致“无效日期”错误.确切的行是:

var date = new Date(time.replace(/-/g,"/").replace(/[TZ]/g," ")); 

我已经尝试过将日期作为(var time)通过2011-03-09T16:46:58 00:00、2011-03-09T16:46:58 0000和2011-03-09T16:48:37Z规格概述了http://www.jibbering.com/faq/#dates,但我似乎仍然无法在Firefox中使用它.实际上,最后一种方法在两种浏览器中均不起作用.

如果有人可以帮助我将此iso8061日期转换为时间戳,那就太好了.

谢谢,
安杰洛·R.

解决方法:

看一下JavaScript ISO8601/RFC3339 Date Parser

他们的代码:

Date.prototype.setISO8601 = function(dString){
    var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/;
    if (dString.toString().match(new RegExp(regexp))) {
        var d = dString.match(new RegExp(regexp));
        var offset = 0;
        this.setUTCDate(1);
        this.setUTCFullYear(parseInt(d[1],10));
        this.setUTCMonth(parseInt(d[3],10) - 1);
        this.setUTCDate(parseInt(d[5],10));
        this.setUTCHours(parseInt(d[7],10));
        this.setUTCMinutes(parseInt(d[9],10));
        this.setUTCSeconds(parseInt(d[11],10));
        if (d[12]) {
            this.setUTCMilliseconds(parseFloat(d[12]) * 1000);
        }
        else {
            this.setUTCMilliseconds(0);
        }
        if (d[13] != 'Z') {
            offset = (d[15] * 60) + parseInt(d[17],10);
            offset *= ((d[14] == '-') ? -1 : 1);
            this.setTime(this.getTime() - offset * 60 * 1000);
        }
    }
    else {
        this.setTime(Date.parse(dString));
    }
    return this;
};

然后您可以通过以下方式使用它:

var today = new Date();
today.setISO8601('2008-12-19T16:39:57.67Z');

可能不太舒服,但是您可以重写此函数,或编写另一个函数以ISO-8601格式返回日期

标签:javascript,timestamp,iso8601
来源: https://codeday.me/bug/20191023/1913044.html