阅读 458

前端工具包之日期格式化

前言

我们在开发过程中,总会封装一些公共函数来作为我们的工具来简化代码或者复用代码,为此,我打算整理一下我日常工作中常用的一些封装的工具函数,本篇文章为时间日期的格式化工具函数封装。

系列文章

1.前端工具包之深浅拷贝

2.前端工具包之日期格式化

3.前端工具包之防抖函数

4.前端工具包之小工具

5.前端工具包之log美化

背景

通常开发中我们会遇到各种类别的日期形式如比较常见的new Date() 输出以下格式

Mon Dec 16 2019 11:01:04 GMT+0800 (中国标准时间)

或者比较通用的字符串类型的格式如2019-12-16 以及附加时分秒的2019-12-16 12:00:00还有一些更加个性化的分隔符如2019/12/16,2019年12月16日等等,有时候我们需要借助第三方库来实现更复杂的时间日期格式化等操作,但其实有时候往往开发时并不需要做如此多的格式化,因此,这里我简单封装了一个函数来应用一般情况下的日期格式化。下面先贴上代码

工具封装

/**
 * 时间格式化
 * @param time (date or 时间戳)
 * @param cFormat
 * @returns {*}
 */
function parseTime(time, cFormat) {
  if (arguments.length === 0) {
    return null
  }
  const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
  let date
  if (typeof time === 'object') {
    date = time
  } else {
    if (('' + time).length === 10) time = parseInt(time) * 1000
    date = new Date(time)
  }
  const formatObj = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  }
  // eslint-disable-next-line
  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key]
    if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
    if (result.length > 0 && value < 10) {
      value = '0' + value
    }
    return value || 0
  })
  // eslint-disable-next-line
  return time_str
}
复制代码

这里传入的参数是日期和格式化字符串的类型,默认可以传入date类型或者字符类型的日期,cFormat为格式化模板字符串, 如果是日期时间戳,则转换为标准date日期格式并预先转换成年月日时分秒这种格式化对象。再针对这个对象的年月日时分秒星期来通过正则匹配和替换。

console.log(parseTime(new Date()))                          //print 2019-12-16 11:10:31
console.log(parseTime(new Date(),'{y}-{m}-{d}'))            //print 2019-12-16
console.log(parseTime(new Date(),'{y}/{m}/{d}'))            //print 2019/12/16
console.log(parseTime(new Date(),'{y}'))                    //print 2019
console.log(parseTime(new Date(),'{h}:{i}:{s}'))            //print 11:14:31
console.log(parseTime(new Date(),'{y}-{m}-{d} 星期 {a}'))   //print 2019-12-16 星期 一
console.log(parseTime(new Date('2019/12/11')))              //print 2019-12-11 
console.log(parseTime('2019-12-11 12:00:00'))               //print 2019-12-11 12:00:00
console.log(parseTime(new Date().getTime()))                //print 2019-12-16 11:20:17
复制代码

可以传入时间戳或者date对象格式来适配不同的格式化模板,也可以给date传入默认值来格式化默认日期


开源库

个人主页 | bin-ui | bin-admin

关注下面的标签,发现更多相似文章
评论