时间对象各单位上的数值增减
/**
* 时间对象的数值增减
* @param {String} interval 增减的时间类型 y - 年 | q - 季度 | M - 月 | w - 周 | d(default) - 日 | h - 时 | m - 分 | s - 秒
* @param {Number} number 增减的具体值
* @param {Date} date 时间对象
* @returns {Date}
*/
export function dateAdd(interval = 'd', number = 0, date = new Date()) {
const methods = {
y: 'FullYear',
q: 'Month',
M: 'Month',
w: 'Date',
d: 'Date',
h: 'Hours',
m: 'Minutes',
s: 'Seconds'
}
const method = methods[interval]
if (method) {
date[`set${method}`](date[`get${method}`]() + number)
}
return date
}
案例
const cur = new Date();
console.log(dateAdd("y", 5, cur)); // Sun Jul 18 2027 23:20:58 GMT+0800 (中国标准时间)
console.log(dateAdd("q", 5, cur)); // Wed Oct 18 2028 23:20:58 GMT+0800 (中国标准时间)
console.log(dateAdd("M", 5, cur)); // Sun Mar 18 2029 23:20:58 GMT+0800 (中国标准时间)
console.log(dateAdd("d", 20, cur)); // Sat Apr 07 2029 23:20:58 GMT+0800 (中国标准时间)
时间格式化
/**
* 时间格式化
* @param {String} format 时间格式
* @param {Date} date 时间对象
* @returns {String}
*/
export function dateFormat(format) {
const date = this || new Date()
const formatStr = format || 'yyyy-MM-dd HH:mm:ss'
const units = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'H+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
}
const year = date.getFullYear().toString()
const matchArr = [
[/yyyy/, year],
[/yy/, year.slice(-2)],
]
for (const key in units) {
if (new RegExp(`(${key})`).test(formatStr)) {
const value = units[key].toString().padStart(2, '0')
matchArr.push([new RegExp(key), value])
}
}
for (const [reg, value] of matchArr) {
formatStr.replace(reg, value)
}
return formatStr
}
案例
const cur1 = new Date("2021/5/18");
console.log(dateFormat(cur1)); // 2021-05-18 0:00:00
console.log(dateFormat(cur1, "yyyy")); // 2021
console.log(dateFormat(cur1, "yyyy-MM")); // 2021-05
console.log(dateFormat(cur1, "yyyy-MM-dd")); // 2021-05-18
console.log(dateFormat(cur1, "yyyy-MM-dd HH")); // 2021-05-18 0
console.log(dateFormat(cur1, "yyyy-MM-dd HH-mm")); // 2021-05-18 0-00
console.log(dateFormat(cur1, "yyyy-MM-dd HH-mm-ss")); // 2021-05-18 0-00-00
日期相减(获取天数)
/**
* 日期相减(获取天数)a - b
* @param {Date} date1 时间对象
* @param {Date} date2 时间对象 - 默认当前时间
* @returns {String}
*/
export function dateMinus(date1, date2 = new Date()) {
const target = date1.getTime()
const cur = date2.getTime()
return Math.ceil((target - cur) / (1000 * 60 * 60 * 24))
}
案例
console.log(dateMinus(new Date('2021/5/18'), new Date('2021/5/16'))); // 2