前端工具包之日期格式化

前言

咱們在開發過程當中,總會封裝一些公共函數來做爲咱們的工具來簡化代碼或者複用代碼,爲此,我打算整理一下我平常工做中經常使用的一些封裝的工具函數,本篇文章爲時間日期的格式化工具函數封裝。前端

系列文章

1.前端工具包之深淺拷貝git

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

3.前端工具包之防抖函數bash

4.前端工具包之小工具ide

5.前端工具包之log美化函數

背景

一般開發中咱們會遇到各類類別的日期形式如比較常見的new Date() 輸出如下格式工具

Mon Dec 16 2019 11:01:04 GMT+0800 (中國標準時間)post

或者比較通用的字符串類型的格式如2019-12-16 以及附加時分秒的2019-12-16 12:00:00還有一些更加個性化的分隔符如2019/12/16,2019年12月16日等等,有時候咱們須要藉助第三方庫來實現更復雜的時間日期格式化等操做,但其實有時候每每開發時並不須要作如此多的格式化,所以,這裏我簡單封裝了一個函數來應用通常狀況下的日期格式化。下面先貼上代碼ui

工具封裝

/**
 * 時間格式化
 * @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日期格式並預先轉換成年月日時分秒這種格式化對象。再針對這個對象的年月日時分秒星期來經過正則匹配和替換。spa

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

相關文章
相關標籤/搜索