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