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


/** 辅助函数:参数类型不确定时,找到它们的共同点作处理 */
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)
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值