在做项目的过程中遇到,后台返回的时间时CST格式,前端想要按照后台返回的时间正确的把日期放在页面总是会出现时差。

在网上进行一番搜索后发现:

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

function dateFormat (date, format) {date = new Date(date);date.setHours(date.getHours()-14);var o = {  'M+' : date.getMonth() + 1, //month  'd+' : date.getDate(), //day  'H+' : date.getHours(), //hour  'm+' : date.getMinutes(), //minute  's+' : date.getSeconds(), //second  'q+' : Math.floor((date.getMonth() + 3) / 3), //quarter  'S' : date.getMilliseconds() //millisecond};if (/(y+)/.test(format))  format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));for (var k in o)  if (new RegExp('(' + k + ')').test(format))    format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));return format;},// 调用dateFormat(orderList.order_time,'yyyy-MM-dd HH:mm:ss')