工做中用到將美國的格格時區轉換成北京時間,研究了一下總結了一下方式用來轉換。 根據時間差獲得下面的轉換時間的差值,而後進行統一處理。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