时间戳转为日期格式时间(输出北京时间,不受本地时区影响)

389 阅读1分钟

时间戳转为时间(日期格式)

一、已有的时间戳转为日期格式

function formatTime(time){
    // 比如需要这样的格式 yyyy-MM-dd hh:mm:ss
    var date = new Date(time);
    var Y = date.getFullYear() + '-';
    var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
    var D = date.getDate() + ' ';
    var h = date.getHours() + ':';
    var m = date.getMinutes() + ':';
    var s = date.getSeconds(); 
    //将上面的拼接到一块
    return Y+M+D+h+m+s
}  
console.log(formatTime(1659062375000));
// 输出结果:2022-07-29 10:39:35

以上为已知的时间戳转为日期格式时间。

已知问题

  • 上述的代码受本机时区影响,数据的结果为东8区时间。
  • 改为其他时区时,同个时间戳会有多个日期格式的时间。如图:

image.png

二、将时间戳转为日期格式时间[北京时间]-不受本地时区影响

重新计算东八区时间戳

function getTime8(time){
    // 东8区,东时区记做正数
    let zoneOffset = 8;
    // 算出时差,并转换为毫秒:
    let offset = new Date().getTimezoneOffset() * 60 * 1000;
    // 此时东8区的时间
    let currentZoneDate = new Date(Number(time) + offset + zoneOffset * 60 * 60 * 1000);
    return new Date(currentZoneDate).getTime()
}

获取日期格式的背景时间

let time = 1659062375000
formatTime(getTime8(time))
// 输出结果固定为:2022-07-29 10:39:35