时间格式转换、日期格式不同导致时区不同(相差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');
用法二:时间格式转换
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');
出现相差8小时的原因:
在ES5
中,如果日期采用连词线(-)
格式分隔,且具有前导0或满足两位数时
,JavaScript会认为这是一个ISO(格林尼治国际标准时的时区)
格式的日期字符串,导致返回的时间是以UTC时区计算的。其他格式的日期一律视为非ISO格式,采用本地时区作为计时标准。
ES6
中,规定凡是没有指定时区的日期字符串,一律使用用户所在的本地时区。