引見
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也一樣有,該類要領發起只管罕用
第一類
format
花樣化時刻 ,format要領也就是我們一樣平常平凡最經常使用的一個了,他一共吸收2個參數,這2個參數都有默認值,不傳就運用默認值參數稱號 參數範例 參數默認值 是不是必傳 申明 花樣化的字符串 string ‘YYYY-MM-DD hh:mm:ss’ N 年YYYY,月MM,日DD,時hh,分mm,秒ss,毫秒SSS,数字禮拜ww,中文禮拜WW 是不是是花樣化一個時刻差 boolean false N 比方你要盤算的時刻是一個倒計時,這個時刻也就須要傳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搞定,
這就是我們尋求的極簡,固然,也會有一丟丟的機能喪失,不過個人以為關於現今的硬件裝備,你完全能夠疏忽這一點點機能。除非你的項目很特別。json
輸出json花樣的時刻,不須要參數直接上代碼
miment().json()
看輸出
{ "year": 2018, "month": 4, "date": 11, "hour": 8, "minute": 57, "second": 41, "day": 3, "milliSecond": 87 }
輸出內容比較簡樸,應當很好明白,這裏就不對輸出做引見了,day返回的是禮拜幾,從0-禮拜天 1-禮拜一,以此類推
stamp
輸出時刻戳,不須要參數miment().stamp()
看輸出
1523408529932
會輸出一串代表當前時刻的数字,這個對前端基礎沒啥用,不過有時刻後端的同學會請求傳這個
daysInMonth
獵取當前月的天數,不須要參數miment().daysInMonth() // 30
第二類
add
增添或削減時刻,它吸收2個參數參數稱號 參數範例 參數默認值 是不是必傳 申明 增量 number 0 N 要增添的時刻量,增添傳正數,削減傳負數 增量單元 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') // 報錯
distance
盤算2個時刻的間隔 吸收2個參數,返回一個miment對象參數稱號 參數範例 參數默認值 是不是必傳 申明 肇端時刻 miment/date/number/string 無 Y 接收4種範例參數,會自動轉換 完畢時刻 miment/date/number/string 無 N 同上 只傳一個肇端時刻的時刻,返回
肇端時刻 – 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秒
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
firstDay
獵取每月的第一天 不須要參數miment().firstDay() // Sun Apr 01 2018 00:00:00 GMT+0800 (CST) miment().firstDay().format() // 2018-04-01 00:00:00
lastDay
獵取每月的末了一天 不須要參數miment().lastDay() // Mon Apr 30 2018 00:00:00 GMT+0800 (CST) miment().lastDay().format() // 2018-04-30 00:00:00
第三類
-
Date自帶要領
miment繼續自Date對象,所以也具有Date對象的一切要領,這裏就不做深切解說,須要更多關於Date對象的申明,
請移步至MDN檢察
> 不過須要注重的是,因為繼續而來的要領是屬於Date對象的,為了保持一致,我們沒有去對要領做修改,所以要領沒法返回miment對象,也就是說沒法鏈式挪用miment
寫在末了
現在這些功用(函數),是我們團隊在一樣平常實踐中遇到的比較經常使用的,假如你對功用有新的需求或許發起,
迎接給我們提Issue,假如喜好miment,
請在我的github上給我一個star,你的star就是我最大的動力了,感謝!