背景
Moment.js很重(源码为4600行左右),所以有很多替代方案的,如:Dayjs、miment等,所以可以根据浏览器的兼容情况自行写个轻量级的库。
1、 简单通过时间对象转换需要的时间格式。
// 时间戳 转时间
export function farmatDate(time, zone = 8, fmt) {
const getCurrentZoneTimestrap = getGLWZTime(time, zone);
const date = new Date(getCurrentZoneTimestrap);
if(/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, `${date.getFullYear()}`);
let o = {
'M+': getMonth() + 1,
'd+': getDay(),
'h+': getHours(),
'm+': getMinutes(),
's+': getSeconds()
};
let str;
for(let key in o) {
if(RegExp(`(${key})`).test(fmt)) {
str = `${o[key]}`;
fmt = fmt.replace(RegExp.$1, str.length === 2 ? str:addLeftZero(str))
}
}
return fmt;
}
function addLeftZero(str) {
return `00${str}`.substr(str.length);
}
// 不同时区下 对时间戳的处理
// getTimezoneOffset() 方法可返回格林威治时间和本地时间之间的时差,以分钟为单位。
// param { timestrap 需要转换的时间, zone转换的时区}
export const getGLWZTime = (timestrap:number, zone:number) => {
const hours = new Date().getTimezoneOffset() / 60; // 计算格林威治时间和本地时间之间相差几个小时 如果是北京东八时区 返回 -8
const millisecond = hours * 3600000; // 毫秒为单位的时差
const standardTime = timestrap + millisecond;// 格林威治时间 = 传入时间戳 + 本地与格林威治时差
const targetZone = standardTime + zone * 3600000; // 目标zone时区时间戳 = 格林威治时间 + 目标时区与格林威治时差
return targetZone;
};
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END