js--参数归一化-日期格式化函数

// 参数归一化
//
/*  
日期时间格式化
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 '今年'
  }
})

 

posted @ 2024-04-16 14:05  小那  阅读(65)  评论(0编辑  收藏  举报