JS使用new Date()处理CST格式时间结果总是多14小时

参考文章:
http://baijiahao.baidu.com/s?id=1575580080665640&wfr=spider&for=pc
https://blog.csdn.net/warylee/article/details/71158692

问题描述
js接收java后台的时间数据时,时间格式的CST时间(北京时间,China Standard Time,UTC+8:00),而js默认的是GMT时间格式,js new出来的时间对象会比java传来的数据多了14个小时。
原因:
new Date(CST)。new Date通过解析currentDateStr返回一个long类型的时间差(UTC时间)来构造日期对象,但这个解析的过程中,如果遇到CST,会被认为是指北美的时区,比格林威治时间(GMT)晚6个小时,按照转换关系,转成UTC需要加6个小时。而在输出receivedCurrentDate的时候会调用toString方法,会根据所在的时区格式化输出日期,也就是将UTC转成China Standard Time,需要加8个小时,所以就出现了相差14个小时
处理方法:

function dateToGMT(strDate){
    var dateStr=strDate.split(" ");  
    var strGMT = dateStr[0]+" "+dateStr[1]+" "+dateStr[2]+" "+dateStr[5]+" "+dateStr[3]+" GMT+0800";  
    var date = new Date(Date.parse(strGMT));
    return date;
}

拓展:
UTC:
世界协调时(Coordinated Universal Time,简称UTC)又称世界标准时间或世界协调时间,是最主要的世界时间标准,在时刻上尽量接近于格林尼治标准时间。对于大多数用途来说,UTC时间被认为能与GMT时间互换,基本相等,但GMT时间已不再被科学界所确定
GMT:
格林尼治标准时间(Greenwich Mean Time,简称GMT)指位于英国伦敦郊区的皇家格林尼治天文台当地的标准时间,格林尼治时间基于天文观测本身的缺陷,已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC)来决定。
CST:

CST代表了4个不同的时间,每个时间和UTC之间的转换关系如下:

中部标准时区(北美洲),Central Standard Time,UT-6:00

澳洲中部时间,Central Standard Time,UT+9:30

北京时间,China Standard Time,UT+8:00

古巴标准时间,Cuba Standard Time,UT-4:00





 

你可能感兴趣的:(前端)