js日期时间格式化函数

使用Vue过滤器的时候,需要格式化日期时间、获取距离当前时间的天数等需求,网上查阅资料整理了一些函数,这里做一下记录。

日期时间格式化函数

这个是最常用的,格式化Date实例为指定格式字符串,如yyyy-MM-dd HH:mm:ss等等。

/**
 * 日期时间格式化函数
 * @param dateObj {Date} date实例
 * @param format {String} 格式字符串
 * @returns {String} 格式化后的字符串
 */
function formatDate(dateObj, format) {
  let o = {
    'M+': dateObj.getMonth() + 1,
    'd+': dateObj.getDate(),
    'h+': dateObj.getHours() % 12 === 0 ? 12 : dateObj.getHours() % 12,
    'H+': dateObj.getHours(),
    'm+': dateObj.getMinutes(),
    's+': dateObj.getSeconds(),
    'q+': Math.floor((dateObj.getMonth() + 3) / 3),
    'S': dateObj.getMilliseconds()
  };
  let week = {
    '0': '\u65e5',
    '1': '\u4e00',
    '2': '\u4e8c',
    '3': '\u4e09',
    '4': '\u56db',
    '5': '\u4e94',
    '6': '\u516d'
  };
  if (/(y+)/.test(format)) {
    format = format.replace(RegExp.$1, (dateObj.getFullYear() + '').substr(4 - RegExp.$1.length));
  }
  if (/(E+)/.test(format)) {
    format = format.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '\u661f\u671f' : '\u5468') : '') + week[dateObj.getDay() + '']);
  }
  for (let k in o) {
    if (new RegExp('(' + k + ')').test(format)) {
      format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
    }
  }
  return format;
}

使用

let str = formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss')

输出

2021-05-18 11:49:05

获取距今天数

需求要获取到指定Dete实例距今的天数,超过一个月采用估值

/**
 * 获取距今天数
 * @param value {Date} date实例
 * @returns {string} 距离当前时间的描述(今天、昨天、几天前、几月前、几年前)
 */
function rangeDate(value) {
  //当前时间
  let date1 = new Date();
  let y1 = date1.getFullYear();
  let m1 = date1.getMonth() + 1;
  let day1 = date1.getDate();
  //传入时间
  let date2 = value;
  let y2 = date2.getFullYear();
  let m2 = date2.getMonth() + 1;
  let day2 = date2.getDate();

  let day, m, y;

  if (day1 == day2 && m1 == m2 && y1 == y2) {
    return '今天';
  } else if (day1 - day2 === 1 && m1 == m2 && y1 == y2) {
    return '昨天';
  } else if (day1 != day2 && m1 == m2 && y1 == y2) {
    day = day1 - day2;
    return day + '天前';
  } else if (day1 - day2 <= 0 && m1 - m2 == 1 && y1 == y2) {
    day = day1 - day2 + 30;
    return day + '天前';
  } else if (day1 - day2 > 0 && m1 - m2 == 1 && y1 == y2) {
    m = m1 - m2;
    return m + '个月前';
  } else if (m1 - m2 > 1 && y1 == y2) {
    m = m1 - m2;
    return m + '个月前';
  } else if (m1 - m2 < 0 && y1 - y2 == 1) {
    m = m1 - m2 + 12;
    return m + '个月前';
  } else {
    y = y1 - y2;
    return y + '年前';
  }
}

使用

let str = rangeDate(new Date('2021-5-1'))

输出

17天前
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值