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

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理