使用Vue过滤器的时候百度了一些日期时间处理的函数,用来格式化日期时间、获取距离当前时间的天数,这里做一下记录。
注:非原创,时间太长原文地址找不到了,望原作者看到后告知。
日期时间格式化函数
这个是最常用的,格式化Date实例为指定格式字符串,如yyyy-MM-dd HH:mm:ss
等等。
/**
* 日期时间格式化函数
* @param dateObj {Date} date实例
* @param format {String} 格式字符串
* @returns {String} 格式化后的字符串
*/
function formatDate(dateObj, format) {
let o = {
'M+': dateObj.getMonth() + 1,
'd+': dateObj.getDate(),
'h+': dateObj.getHours() % 12 === 0 ? 12 : dateObj.getHours() % 12,
'H+': dateObj.getHours(),
'm+': dateObj.getMinutes(),
's+': dateObj.getSeconds(),
'q+': Math.floor((dateObj.getMonth() + 3) / 3),
'S': dateObj.getMilliseconds()
};
let week = {
'0': '\u65e5',
'1': '\u4e00',
'2': '\u4e8c',
'3': '\u4e09',
'4': '\u56db',
'5': '\u4e94',
'6': '\u516d'
};
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (dateObj.getFullYear() + '').substr(4 - RegExp.$1.length));
}
if (/(E+)/.test(format)) {
format = format.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '\u661f\u671f' : '\u5468') : '') + week[dateObj.getDay() + '']);
}
for (let 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;
}
使用
let str = formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss')
输出
2021-05-18 11:49:05
获取距今天数
需求要获取到指定Dete实例距今的天数,超过一个月采用估值
/**
* 获取距今天数
* @param value {Date} date实例
* @returns {string} 距离当前时间的描述(今天、昨天、几天前、几月前、几年前)
*/
function rangeDate(value) {
//当前时间
let date1 = new Date();
let y1 = date1.getFullYear();
let m1 = date1.getMonth() + 1;
let day1 = date1.getDate();
//传入时间
let date2 = value;
let y2 = date2.getFullYear();
let m2 = date2.getMonth() + 1;
let day2 = date2.getDate();
let day, m, y;
if (day1 == day2 && m1 == m2 && y1 == y2) {
return '今天';
} else if (day1 - day2 === 1 && m1 == m2 && y1 == y2) {
return '昨天';
} else if (day1 != day2 && m1 == m2 && y1 == y2) {
day = day1 - day2;
return day + '天前';
} else if (day1 - day2 <= 0 && m1 - m2 == 1 && y1 == y2) {
day = day1 - day2 + 30;
return day + '天前';
} else if (day1 - day2 > 0 && m1 - m2 == 1 && y1 == y2) {
m = m1 - m2;
return m + '个月前';
} else if (m1 - m2 > 1 && y1 == y2) {
m = m1 - m2;
return m + '个月前';
} else if (m1 - m2 < 0 && y1 - y2 == 1) {
m = m1 - m2 + 12;
return m + '个月前';
} else {
y = y1 - y2;
return y + '年前';
}
}
使用
let str = rangeDate(new Date('2021-5-1'))
输出
17天前