利用正則轉(zhuǎn)換成自定義格式的時間字符串

每個網(wǎng)站都會有時間相關的展示琅捏,例如文章、新聞的發(fā)布時間孙蒙,時間選擇器的時間展示项棠,顯示當天時間等等】媛停基本上后端數(shù)據(jù)庫存儲的都是Unix時間戳香追,前端需要將它轉(zhuǎn)換成對應格式的字符串

格式類似于2018.09.08,18-09-08,09-08 16:37, 2018-09-08 16:37:00等等等。如果網(wǎng)站的時間展示格式是統(tǒng)一的坦胶,你完全可以定一個函數(shù)來轉(zhuǎn)換對應的格式透典,如下

// 轉(zhuǎn)換成 ‘2018-09-08 16:37:00’
function dateFormat(time) {
  const date = new Date(time * 1000)
  // 不足倆位補0
  const fillZero = number => number > 9 ? number : '0' + number
  const year = date.getFullYear()
  const month = fillZero(date.getMonth() + 1)
  const day = fillZero(date.getDate())
  const hours = fillZero(date.getHours())
  const minutes = fillZero(date.getMinutes())
  const seconds = fillZero(date.getSeconds())
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}  

但當你網(wǎng)站有一區(qū)域的時間展示不需要時分秒的時候,這時也可以通過將函數(shù)增加參數(shù)顿苇,來返回不同格式:

// isHours 參數(shù)代表是否需要時分秒
function dateFormat(time, isHours) {
  // .....
  if (isHours) {
    return `${year}-${month}-${day}`
  } else {
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
  }
}

如果有的情況需要將連接符改為'.'峭咒,類似于2018.09.08,再定義個連接符參數(shù),雖然也可以解決問題纪岁,但當又有其他格式(類似于只需要年份后倆位18.09.08, 不需要補02018.9.8)時,你的dateFormat函數(shù)就會臃腫起來凑队,傳的參數(shù)也會越來越多。


想要寫一個通用的時間轉(zhuǎn)換函數(shù)是可以借鑒成熟插件的方法幔翰,傳入一個格式參數(shù)('YYYY-MM-dd HH:mm:ss')漩氨,來轉(zhuǎn)換對應格式的字符串短条。這時就可以使用正則恢准,去匹配替換格式中的字母莺治。

/**
 * 將時間戳轉(zhuǎn)換為相對應格式時間
 * @param {時間戳} time 
 * @param {時間格式} format 
 */

function dateFormat(time, format) {
  const date = new Date(time * 1000)

  const pattern = {
    'Y+': date.getFullYear(),
    'M+': date.getMonth() + 1,
    'D+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }

  for (var k in pattern) {
    const regexp = new RegExp(`(${k})`)
    const replaceFn = (match) => {
      // 當匹配到倆個YY或以上時裆赵,替換成年份
      if (match.includes('YY')) {
        return ('' + pattern[k]).substr(4 - match.length)
      }
      // 其他的都判斷匹配長度是否大于1模狭,大于則補充0沐扳,否則直接輸出
      const fillZero = num => num > 9 ? num : '0' + num
      return match.length === 1 ? pattern[k] : fillZero(pattern[k])
    }
    // 將字符串按照正則匹配替換成函數(shù)返回值
    format = format.replace(regexp, replaceFn)
  }

  return format
}

上面函數(shù)首先定義了格式參數(shù)需要的正則和對應的取值操作挠将,循環(huán)遍歷正則對象耕姊,將匹配出來的字符串替換成時間即可婚陪。其中String.replace第一個參數(shù)可以是正則蚓耽,第二個參數(shù)可以是返回替換字符串的函數(shù)渠牲,接受的參數(shù)是匹配到的字符傳。傳送門
這個函數(shù)還有許多不足步悠,其中沒有對不允許的格式進行判斷签杈,而且只能轉(zhuǎn)換對應時間,不能通過時間戳轉(zhuǎn)換前幾天鼎兽,或幾周前的時間答姥。如果業(yè)務涉及到復雜的時間轉(zhuǎn)換,可以使用以下幾種成熟的時間插件谚咬。例如:date-fns鹦付、momentdayjs

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末择卦,一起剝皮案震驚了整個濱河市敲长,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秉继,老刑警劉巖祈噪,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尚辑,居然都是意外死亡辑鲤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門腌巾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遂填,“玉大人,你說我怎么就攤上這事澈蝙∠偶幔” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵灯荧,是天一觀的道長礁击。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么哆窿? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任链烈,我火速辦了婚禮,結(jié)果婚禮上挚躯,老公的妹妹穿的比我還像新娘强衡。我一直安慰自己,他們只是感情好码荔,可當我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布漩勤。 她就那樣靜靜地躺著,像睡著了一般缩搅。 火紅的嫁衣襯著肌膚如雪越败。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天硼瓣,我揣著相機與錄音究飞,去河邊找鬼。 笑死堂鲤,一個胖子當著我的面吹牛亿傅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筑累,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼袱蜡,長吁一口氣:“原來是場噩夢啊……” “哼丝蹭!你這毒婦竟也來了慢宗?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奔穿,失蹤者是張志新(化名)和其女友劉穎镜沽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贱田,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡缅茉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了男摧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔬墩。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖耗拓,靈堂內(nèi)的尸體忽然破棺而出拇颅,到底是詐尸還是另有隱情,我是刑警寧澤乔询,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布樟插,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏黄锤。R本人自食惡果不足惜搪缨,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸵熟。 院中可真熱鬧副编,春花似錦、人聲如沸流强。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煮盼。三九已至短纵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間僵控,已是汗流浹背香到。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留报破,地道東北人悠就。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像充易,于是被迫代替她去往敵國和親梗脾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程盹靴,因...
    小菜c閱讀 6,415評論 0 17
  • 浮屠生jackson閱讀 275評論 0 1
  • 劉云帆裝出一副努力回憶的樣子炸茧,道:“我那時候好像在樹林里看到一個長頭發(fā)的女人,一閃而逝稿静。然后那幾個劫匪就互相開槍梭冠。...
    飄雲(yún)閱讀 205評論 0 1
  • 脆弱的人才會四處游說自己的不幸,堅強的人只會不動聲色的越加強大改备。
    綠豆大拉皮閱讀 250評論 0 0
  • 沉默一刻 想走就走 何必停留 累了 歇歇吧 一杯茶 溫馨 自由
    永恒的王者閱讀 171評論 0 0