js-CST转换为GMT有14小时误差的解决方法

3次阅读

共计 953 个字符,预计需要花费 3 分钟才能阅读完成。

在做项目的过程中遇到,后台返回的时间时 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')
正文完
 0