美國各個時區轉換成北京時間 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

相關文章
相關標籤/搜索