JS参数归一化之对日期时间的格式化

发布时间:2023年12月18日

/** 辅助函数:参数类型不确定时,找到它们的共同点作处理 */
function _formatNormalize(formatter){
  if(typeof formatter === 'function'){
    return formatter;
  }
  if(typeof formatter !== 'string'){
    throw new TypeError('formatter must be string or function');
  }
  if(formatter === 'data'){
    formatter = 'yyyy-MM-dd';
  }else if(formatter === 'datatime'){
    formatter = 'yyyy-MM-dd HH:mm:ss'; 
  }
  return (dateInfo) => {
    const { yyyy, MM, dd, HH, mm, ss, ms } = dateInfo;
    return formatter
    .replace('yyyy', yyyy)
    .replace('MM', MM)
    .replace('dd', dd)
    .replace('HH', HH)
    .replace('mm', mm)
    .replace('ss', ss)
    .replace('ms', ms)
  }
}
/** 格式化日期,第三个参数: 是否需要补全位数 */
function formate(date, formatter, isPad = false){
  formatter = _formatNormalize(formatter);
  const dateInfo = {
    year: date.getFullYear(),
    month: date.getMonth() + 1,
    date: date.getDate(),
    hours: date.getHours(),
    minutes: date.getMinutes(),
    seconds: date.getSeconds(),
    milliseconds: date.getMilliseconds()
  }
  dateInfo.yyyy = isPad ? dateInfo.year.toString().padStart(4, '0') : dateInfo.year;
  dateInfo.MM = isPad ? dateInfo.month.toString().padStart(2, '0') : dateInfo.month;
  dateInfo.dd = isPad ? dateInfo.date.toString().padStart(2, '0') : dateInfo.date;
  dateInfo.HH = isPad ? dateInfo.hours.toString().padStart(2, '0') : dateInfo.hours;
  dateInfo.mm = isPad ? dateInfo.minutes.toString().padStart(2, '0') : dateInfo.minutes;
  dateInfo.ss = isPad ? dateInfo.seconds.toString().padStart(2, '0') : dateInfo.seconds;
  dateInfo.ms = isPad ? dateInfo.milliseconds.toString().padStart(3, '0') : dateInfo.milliseconds;
  return formatter(dateInfo);
}

// 1999-4-2
let a = formate(new Date(), 'data'); 

// 1999-4-2 12:1:34
let b = formate(new Date(), 'datatime');

// 1999-04-02
let c = formate(new Date(), 'data', true);

//1999-04-02 12:1:34
let d = formate(new Date(), 'datatime', true);

// 1999年04月06日 12:01:34
let e = formate(new Date(),'yyyy年MM月dd日 HH:mm:ss', true);

//1999年4月6日 12:1:34
const f = formate(new Date('2022/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 `今年`
}
});
  console.log(a, b, c, d, e, f)
文章来源:https://blog.csdn.net/qq_39691676/article/details/135069961
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。