美国各个时区转换成北京时间 utc gmt

工做中用到将美国的格格时区转换成北京时间,研究了一下总结了一下方式用来转换。 根据时间差获得下面的转换时间的差值,而后进行统一处理。php

export function utcChangeBeijing(date) {spa

var time_zone = Number(localStorage.getItem('TimeZone')) === 0 ?  1 : Number(localStorage.getItem('TimeZone'))
if (date == '' || date == null) {
    return ''
} else {
    switch(time_zone) {
        case 1:
            // 处理北京时间
            return TimeFormat(date, 0)
            break;
        case 2:
            // 东部时间  有夏时令和冬时令  相差12个小时, 冬时令相差13个小时
            if (IsSumber(date, 1)) {
                return TimeFormat(date, 12)
            } else {
                return TimeFormat(date, 13)
            }
        case 3:
            // 中部时间  有夏时令和冬时令  相差13个小时, 冬时令相差14个小时
            if (IsSumber(date, 1)) {
                return TimeFormat(date, 13)
            } else {
                return TimeFormat(date, 14)
            }
        case 4:
            // 山地时间  有夏时令和冬时令 夏时令 相差14个小时, 冬时令相差15个小时
            if (IsSumber(date, 1)) {
                return TimeFormat(date, 14)
            } else {
                return TimeFormat(date, 15)
            }
        case 5:
            // 亚利桑那时间 相差15个小时
            return TimeFormat(date, 15)
        case 6:
            // 太平洋时间  有夏时令和冬时令 夏时令 相差15个小时, 冬时令相差16个小时
            if (IsSumber(date, 1)) {
                return TimeFormat(date, 15)
            } else {
                return TimeFormat(date, 16)
            }
        case 7:
            // 阿拉斯加时间  有夏时令和冬时令  夏时令 相差17个小时, 冬时令相差18个小时
            if (IsSumber(date, 1)) {
                return TimeFormat(date, 17)
            } else {
                return TimeFormat(date, 18)
            }
        case 8:
            // 夏威夷时间 没有夏时令和冬时令 相差18个小时
            return TimeFormat(date, 18)
    }
}
复制代码

}code

#格式化时间转换成YYYY-MM-DD hh-mm-ss,可能方式有点笨拙。就这么解决了。orm

function TimeFormat(date, timeNumber) {get

date = new Date(date)
var time = date.getTime() + timeNumber * 3600 * 1000
var dateNow = new Date(time);
var Y = dateNow.getFullYear() + '-';
var M = (dateNow.getMonth() + 1 < 10 ? '0' + (dateNow.getMonth() + 1) : dateNow.getMonth() + 1) + '-';
var D = (dateNow.getDate() <10 ) ? '0' + dateNow.getDate() + ' ' : dateNow.getDate() + ' ';
var h = (dateNow.getHours() < 10) ? '0' + dateNow.getHours() + ':' : dateNow.getHours() + ':';
var m = (dateNow.getMinutes() < 10) ? '0' + dateNow.getMinutes() + ':' : dateNow.getMinutes() + ':';
var s = (dateNow.getSeconds() < 10) ? '0' + dateNow.getSeconds() : dateNow.getSeconds();
return Y + M + D + h + m + s;
复制代码

}it

#判断是东部时区仍是西部时区,默认按照东部时区处理了。后台用的php居然能所有兑上。好神奇io

function IsSumber(date, isEast) {ast

date = new Date(date)
var start = new Date(date.getTime());
start.setMonth(0);
start.setDate(1);
start.setHours(0);
start.setMinutes(0);
start.setSeconds(0);

var middle = new Date(start.getTime());
middle.setMonth(6);
// 若是年始和年中时差相同,则认为此国家没有夏令时
if ((middle.getTimezoneOffset() - start.getTimezoneOffset()) == 0) {
    return false;
}
var margin = 0;
if (isEast == 1) {
    margin = middle.getTimezoneOffset();
} else {
    margin = start.getTimezoneOffset();
}

if (date.getTimezoneOffset() == margin) {
    return true;
}
return false;
复制代码

}function

在这里额外提醒,若是本地电脑设置的语言不一样的话,尽可能增长new Date()返回的后面时区的语言。上面这套仅对中国用户有用。class

相关文章
相关标签/搜索