// 参数归一化
//
/*
日期时间格式化
date:日期时间
isFillZero:是否需要0补位
*/
function formate(date,formater,isFillZero = false){
formater = _formatNormalize(formater)
function _isFillZero(value,length){
if(isFillZero){
return (value + '').padStart(length,'0')
}else{
return value.toString()
}
}
const dateInfo = {
year:date.getFullYear(),
month:date.getMonth() + 1,
day:date.getDate(),
hour:date.getHours(),
minute:date.getMinutes(),
second:date.getSeconds(),
millisecond:date.getMilliseconds(),
}
dateInfo.yyyy = _isFillZero(dateInfo.year,4)
dateInfo.MM = _isFillZero(dateInfo.month,2)
dateInfo.dd = _isFillZero(dateInfo.day,2)
dateInfo.HH = _isFillZero(dateInfo.hour,2)
dateInfo.mm = _isFillZero(dateInfo.minute,2)
dateInfo.ss = _isFillZero(dateInfo.second,2)
console.log(':dateInfo',formater(dateInfo))
return formater(dateInfo)
}
function _formatNormalize(formatter){
console.log('formatter',formatter)
// formatter参数是一个函数
if(typeof formatter === 'function'){
return formatter
}
// 参数不是字符串,则抛出异常
if(typeof formatter !== 'string'){
throw new Error('formatter must be a string or a function')
}
return (dateInfo)=>{
console.log('dateInfo---',dateInfo)
const { yyyy,MM,dd,HH,mm,ss} = dateInfo
return formatter.replace(/yyyy/g,yyyy).replace(/MM/g,MM).replace(/dd/g,dd).replace(/HH/g,HH).replace(/mm/g,mm).replace(/ss/g,ss);
}
}
// 调用日期时间格式化可能的方法
// 格式:2024-1-1
// formate(new Date(),'date')
// // 格式:2024-1-1 14:1:44
// formate(new Date(),'datetime')
// // 格式:2024-01-01
// formate(new Date(),'date',true)
// // 格式:2024-01-01 14:01:44
// formate(new Date(),'datetime',true)
// // 格式:2024年01月01日 14:01:01:336
// formate(new Date(),'yyyy年MM月dd日 HH:mm:ss.ms',true)
formate(new Date('2021/1/1'),(dateInfo)=>{
const {year} = dateInfo
const thisYear = new Date().getFullYear();
if(year < thisYear){
return `${thisYear - year}年前`;
}else if(year > thisYear){
return `${year - thisYear}年后`;
}else{
return '今年'
}
})