ISO 8601日期扩展格式 与UTC 时间类型的相互转化

UTC时间类型比较常见,下例的时间就是UTC时间格式:

ISO 8601扩展格式为: YYYY-MM-DDTHH:mm:ss.sssZ 例如:(下图中红色边框圈起来的部分)


注意:只有兼容ECMAScript 5的实现才支持这种格式。支持这种时间格式的浏览器有:IE9,Chrome,FireFox,Safari等,IE9之前的IE浏览器 不支持这种时间格式。

将ISO 8601时间类型转化为UTC时间类型的方法如下(兼容及不兼容ECMAScript 5的浏览器都适用):

Date.prototype.setISO8601 = function (string) {
        var regexp = "([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(string)
        {
            var d = string.match(new RegExp(regexp));
            var offset = 0;
            var date = new Date(d[1], 0, 1);

            if (d[3]) {
                date.setMonth(d[3] - 1);
            }
            if (d[5]) {
                date.setDate(d[5]);
            }
            if (d[7]) {
                date.setHours(d[7]);
            }
            if (d[8]) {
                date.setMinutes(d[8]);
            }
            if (d[10]) {
                date.setSeconds(d[10]);
            }
            if (d[12]) {
                date.setMilliseconds(Number("0." + d[12]) * 1000);
            }
            if (d[14]) {
                offset = (Number(d[16]) * 60) + Number(d[17]);
                offset *= ((d[15] == '-') ? 1 : -1);
            }
            offset -= date.getTimezoneOffset();
            time = (Number(date) + (offset * 60 * 1000));
            this.setTime(Number(time));
        }
        else
        {
            return;
        }
    }
引用方法如下:

var today = new Date();
today.setISO8601(temprature_time_sorted_uniq[i].tm);
其中temprature_time_sorted_uniq[i].tm 是传递给函数的ISO 8601类型的时间参数。它的值如下:


转化后的值为:

如果想把UTC格式转化为ISO 8601,方法如下:

function ISODateString(d) {
    function pad(n){
        return n<10 ? '0'+n : n
    }
    return d.getUTCFullYear()+'-'
    + pad(d.getUTCMonth()+1)+'-'
    + pad(d.getUTCDate())+'T'
    + pad(d.getUTCHours())+':'
    + pad(d.getUTCMinutes())+':'
    + pad(d.getUTCSeconds())+'Z'
}

引用方式:

参考资料:
http://webcloud.se/log/JavaScript-and-ISO-8601/





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值