moment太重? 那就嘗嘗miment--一個超輕量級的js時候庫

引見

Miment 是一個輕量級的時刻庫(打包緊縮后只要1K),沒有太多的要領,
Miment的設想理念就是讓你以險些為零的本錢疾速上手,無需一遍一遍的擼文檔

由來

起首 致敬一下Moment,異常好用的一個時刻庫,我自身也是Moment重度運用者,用習慣了Moment,
一遇到須要處置懲罰時刻的需求,立馬Moment,不過有時刻想一想,Moment給我們供應了那末多的功用,然則我們每天用的,
也就那末一兩個,恰好最近在寫微信小順序,然後在頁面引入Moment,打包完,包居然大了200多K,把Moment去掉,
就直接少掉200多K,重複試了好幾次,肯定一個Moment在小順序內里,佔用也許200K的空間,因而就想本身寫一個相似
Moment的精簡的時刻庫,因而就有了這個,為何要叫Miment呢,實在剛開始我是想叫Mini-Moment的,
然則考慮到今後可能會常常運用到,打2個單詞中心還要加一個下劃線太累了,所以就把Mini-Moment縮水成Miment了。

開始運用

假如你是直接在瀏覽器內里運用,請下載./dist/miment-min.js到你的項目內里去,然後在頁面引入后即可直接運用miment


<script src='你js寄存的目次/miment-min.js'> </script>
<script>
    miment().format()  //  2018-04-09 23:01:58 這是我寫這篇文檔的時刻,運轉代碼顯現的時刻
</script>

假如你是在單頁面運用或許nodejs環境下運用,起首你須要運用裝置一下Miment

npm i miment

或許

yarn add miment

然後就能夠在你的項目中運用了

import miment from 'miment'
miment().format()

API

你也能夠猛戳這裏看
example

API 分為3大類

第一類是返回其他對象的,比方format,返回的是字符串 json返回的是一個josn

第二類是返回miment對象的,你能夠在調完一個api背面繼續挪用另一個api,也就是我們所說的鏈式挪用

第三類是從Date對象繼續的,也就是說Date對象有的要領,miment也一樣有,該類要領發起只管罕用

第一類

  1. format 花樣化時刻 ,format要領也就是我們一樣平常平凡最經常使用的一個了,他一共吸收2個參數,這2個參數都有默認值,不傳就運用默認值

    參數稱號參數範例參數默認值是不是必傳申明
    花樣化的字符串string‘YYYY-MM-DD hh:mm:ss’N年YYYY,月MM,日DD,時hh,分mm,秒ss,毫秒SSS,数字禮拜ww,中文禮拜WW
    是不是是花樣化一個時刻差booleanfalseN比方你要盤算的時刻是一個倒計時,這個時刻也就須要傳true

    本着簡樸的準繩,這裏花樣化體式格局沒有做的太天真,有時刻天真也是一種進修本錢,因為你須要記許多的用法,不是嗎?,

    注重花樣化字符串辨別大小寫,記的技能是大的單元大寫 YYYY MM DD,小的單元小寫 hh mm ss 毫秒跟禮拜特別的零丁記,

    參數必需嚴厲根據申明內里的填寫,多一個或許少一個都認不到,比方YYYY寫成YYY或許YY如許是辨認不了的

    第二個參數的用法能夠參考 distance函數

    示例

    miment().format('YYYY年MM月DD日 hh:mm:ss')  // 2018-04-09 23:49:36
    miment().format('YYYY/MM/DD hh-mm-ss SSS') // 2018/04/09 23-49-36 568
    miment().format('YYYY年MM月DD日 禮拜WW')     // 2018年04月09日 禮拜一
    miment().format('YYYY年MM月DD日 禮拜ww')     // 2018年04月09日 禮拜1 (禮拜日這邊會顯現禮拜0)
    

    擴大一下,假如我們只是想獵取年份或許月份或許日,能夠如許用

    miment().format('YYYY')   // 2018
    miment().format('MM')     // 04
    miment().format('DD')     // 09
    miment().format('hh')     // 23
    miment().format('mm')     // 57
    miment().format('ss')     // 16
    miment().format('SSS')    // 063
    miment().format('ww')     // 1
    miment().format('WW')     // 一
    

    所以,有了這個要領,實在你能夠不須要去記大部分原生的要領(getFUllYear,getDate,getDay…),一切的需求一個format搞定,
    這就是我們尋求的極簡,固然,也會有一丟丟的機能喪失,不過個人以為關於現今的硬件裝備,你完全能夠疏忽這一點點機能。除非你的項目很特別。

  2. json 輸出json花樣的時刻,不須要參數

    直接上代碼

    miment().json()
    

    看輸出

    {
        "year": 2018,
        "month": 4,
        "date": 11,
        "hour": 8,
        "minute": 57,
        "second": 41,
        "day": 3,
        "milliSecond": 87
    }
    

    輸出內容比較簡樸,應當很好明白,這裏就不對輸出做引見了,day返回的是禮拜幾,從0-禮拜天 1-禮拜一,以此類推

  3. stamp 輸出時刻戳,不須要參數

    miment().stamp()
    

    看輸出

    1523408529932
    

    會輸出一串代表當前時刻的数字,這個對前端基礎沒啥用,不過有時刻後端的同學會請求傳這個

  4. daysInMonth 獵取當前月的天數,不須要參數

      miment().daysInMonth()   // 30
    

第二類

  1. add 增添或削減時刻,它吸收2個參數

    參數稱號參數範例參數默認值是不是必傳申明
    增量number0N要增添的時刻量,增添傳正數,削減傳負數
    增量單元string無默認值Y要增添的時刻單元,可選有YYYY MM DD hh mm ss SSS ww WW

    單元 的可選參數跟花樣化要領
    format的相似,這麼做也是為了輕易影象,只須要記一套計劃

    一樣地 單元也辨別大小寫,記的技能是大的單元大寫 YYYY MM DD,小的單元小寫 hh mm ss 毫秒跟禮拜特別的零丁記,
    參數必需嚴厲根據申明內里的填寫,多一個或許少一個都認不到,比方YYYY寫成YYY或許YY如許是辨認不了的

    miment().add(1,'DD')  // 增添一天
    miment().add(1,'YYYY').add(2,'MM').add(-3,'DD')  // 增添1年2個月又減歸去3天
    miment().add(-1,'ww')  // 減去一周 --即獵取上周的日期
    miment().add(500,SSS)  // 增添500毫秒
    

    add返回的值是增添完后的miment對象,所以我們能夠在它背面繼續挪用miment有的要領。

    miment().add(1,'DD').format()   // 我測試的時刻,打印的是 2018-04-12 09:29:55
    

    須要注重的是,當你調完第一類的要領今後,返回的就不是miment對象了,比方format返回的是一個字符串,這個時刻你就不能再挪用miment上的要領了,
    會報錯 Uncaught TypeError: miment(...).format(...).xxx is not a function 因為字符串的原型上面沒有這個要領

    miment().add(1,'DD').format().add(1,'DD')  // 報錯
    
  2. distance 盤算2個時刻的間隔 吸收2個參數,返回一個miment對象

    參數稱號參數範例參數默認值是不是必傳申明
    肇端時刻miment/date/number/stringY接收4種範例參數,會自動轉換
    完畢時刻miment/date/number/stringN同上

    只傳一個肇端時刻的時刻,返回
    肇端時刻 – miment當前時刻

    肇端時刻和完畢時刻都有傳的時刻,返回 肇端時刻 – 完畢時刻

    miment().distance('2018-04-10 00:00:00')  // Mon Dec 29 1969 22:11:51 GMT+0800 (CST)
    miment().distance(1523408529932)          // Wed Dec 31 1969 07:13:47 GMT+0800 (CST)
    
    miment().distance('2018-04-10 00:00:00', new Date())  //Mon Dec 29 1969 22:11:13 GMT+0800 (CST)
    miment().distance('2018-04-10 00:00:00', '2018-04-11 00:00:00')  //Mon Dec 29 1969 22:10:46 GMT+0800 (CST)
    

    你肯定注重到了,distance要領返回的時刻,居然都是1969年的? 這實際上是基於1970-01-01 00:00:00的一個毫秒數,
    詳細請看 百度百科-unix時刻,
    而我們把兩個時刻相減,獲得的多是一個相對來說很小的數(另有多是負數),所以離1970很近

    那我們要怎樣顯現我們能看得懂的時刻呢? 很簡樸 用花樣化時刻函數format,還記得format函數的第二個參數嗎?
    就是特地用來花樣化distance盤算出來的時刻差,只要把第二個參數設為true,就能把當前時刻花樣化成時刻差
    我們先來看看第二個參數不傳,或許傳false的時刻是什麼模樣的

    miment().distance(1523408529932).format('YYYY年MM月DD日 hh時mm分ss秒')        // 1969年12月30日 00時52分16秒
    miment().distance(1523408529932).format('YYYY年MM月DD日 hh時mm分ss秒',false)  // 1969年12月30日 00時52分16秒
    

    然後我們把第二個參數設為true

    miment().distance(1523408529932).format('YYYY年MM月DD日 hh時mm分ss秒',true)  // 00年01月03日 23時08分23秒
    
    
  3. firstDayOfWeek 獵取 本周的第一天(周日) 不須要參數

      miment().firstDayOfWeek()           // Sun Apr 08 2018 11:27:55 GMT+0800 (CST)
      miment().firstDayOfWeek().format()  // 2018-04-08 11:27:55
    

    假如想獵取周一呢?周二、三、四、五、六呢?

      miment().firstDayOfWeek().add(1,'DD').format() // 2018-04-09 11:27:55
    
  4. firstDay 獵取每月的第一天 不須要參數

    miment().firstDay()           // Sun Apr 01 2018 00:00:00 GMT+0800 (CST)
    miment().firstDay().format()  // 2018-04-01 00:00:00
    
  5. lastDay 獵取每月的末了一天 不須要參數

    miment().lastDay()           // Mon Apr 30 2018 00:00:00 GMT+0800 (CST)
    miment().lastDay().format()  // 2018-04-30 00:00:00
    

第三類

  1. Date自帶要領 miment繼續自Date對象,所以也具有Date對象的一切要領,這裏就不做深切解說,須要更多關於Date對象的申明,

請移步至MDN檢察

> 不過須要注重的是,因為繼續而來的要領是屬於Date對象的,為了保持一致,我們沒有去對要領做修改,所以要領沒法返回miment對象,也就是說沒法鏈式挪用miment

寫在末了

現在這些功用(函數),是我們團隊在一樣平常實踐中遇到的比較經常使用的,假如你對功用有新的需求或許發起,
迎接給我們提Issue,假如喜好miment,
請在我的github上給我一個star,你的star就是我最大的動力了,感謝!

    原文作者:noahlam
    原文地址: https://segmentfault.com/a/1190000014401666
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞