时间格式转换、日期格式不同导致时区不同(相差8小时)

我心飞翔 分类:javascript

格式转换函数:

export function formatDate (value, fmt) {
  let getDate = new Date(value);
  let o = {
    'M+': getDate.getMonth() + 1,
    'd+': getDate.getDate(),
    'h+': getDate.getHours(),
    'm+': getDate.getMinutes(),
    's+': getDate.getSeconds(),
    'q+': Math.floor((getDate.getMonth() + 3) / 3),
    'S': getDate.getMilliseconds()
  };
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (let k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
    }
  }
  return fmt;
}
 

用法一:时间戳转时间

let date1 = new Date().getTime();
let date1After = formatDate(date1, 'yyyy-MM-dd hh:mm:ss');
 

image.png

用法二:时间格式转换

let date2 = '2021-3-25';
let date2After = formatDate(date2, 'yyyy/MM/dd hh:mm:ss');

let date3 = '2021-03-25';
let date3After = formatDate(date3, 'yyyy/MM/dd hh:mm:ss');

let date4 = '2021/03/25';
let date4After = formatDate(date4, 'yyyy/MM/dd hh:mm:ss');

let date5 = '2021/3/25';
let date5After = formatDate(date5, 'yyyy/MM/dd hh:mm:ss');

let date6 = '2021/03/25';
let date6After = formatDate(date6, 'yyyy/MM/dd hh:mm:ss');

let date7 = '2021-11-25';
let date7After = formatDate(date7, 'yyyy/MM/dd hh:mm:ss');
 

image.png

出现相差8小时的原因:

ES5中,如果日期采用连词线(-)格式分隔,且具有前导0或满足两位数时,JavaScript会认为这是一个ISO(格林尼治国际标准时的时区)格式的日期字符串,导致返回的时间是以UTC时区计算的。其他格式的日期一律视为非ISO格式,采用本地时区作为计时标准。

ES6中,规定凡是没有指定时区的日期字符串,一律使用用户所在的本地时区。

回复

我来回复
  • 暂无回复内容