首頁  >  文章  >  web前端  >  利用fecha進行JS日期處理

利用fecha進行JS日期處理

高洛峰
高洛峰原創
2016-12-06 11:12:451614瀏覽

前言

目前在專案中我們使用了fecha來進行日期處理,並對fecha進行了重新封裝,滿足專案中的實際需求。

fecha介紹

fecha是一個日期格式化和解析的js庫,它提供了強大的日期處理功能,功能強大且只有2k大小。安裝方式簡單,只需要npm install fecha --save即可

Formatting(日期格式化)

fecha提供一個format方法。 fecha.format接收一個Date物件(或一個時間戳記)和一個字串形式的日期格式,然後傳回一個字串(處理後的日期)。

注意: 當傳入的參數無效時,fecha會報錯

fecha.format(<Date Object>, <String Format>);
 
// 自定义格式化
// string format可以传入自定义的格式,fecha会返回相应的格式
fecha.format(new Date(2015, 10, 20), &#39;dddd MMMM Do, YYYY&#39;); // &#39;Friday November 20th, 2015&#39;
fecha.format(new Date(1998, 5, 3, 15, 23, 10, 350), &#39;YYYY-MM-DD hh:mm:ss.SSS A&#39;);// &#39;1998-06-03 03:23:10.350 PM&#39;
 
// 通过自定义的常量来设置日期格式
fecha.format(new Date(2015, 10, 20), &#39;mediumDate&#39;);// &#39;Nov 20, 2015&#39;
fecha.format(new Date(2015, 2, 10, 5, 30, 20), &#39;shortTime&#39;);// &#39;05:30&#39;
 
// 添加一些其他常量
fecha.format(new Date(2001, 2, 5, 6, 7, 2, 5), &#39;[on] MM-DD-YYYY [at] HH:mm&#39;); // &#39;on 03-05-2001 at 06:07&#39;

   

這樣我們就可以很容易的處理new Date() → 2016年11月19日

Parsing(日期解析)

fecha另外提供了一個parse方法。和format類似,fecha.parse接收一個Date字串和一個字串形式的日期格式,然後傳回一個Date物件。


注意: 當傳入的參數無效時,fecha會報錯

fecha.format(new Date(), &#39;YYYY[年]MM[月]DD[日]&#39;)

   

自訂命名常數

// 自定义格式化
formatsfecha.parse(&#39;February 3rd, 2014&#39;, &#39;MMMM Do, YYYY&#39;); // new Date(2014, 1, 3)
fecha.parse(&#39;10-12-10 14:11:12&#39;, &#39;YY-MM-DD HH:mm:ss&#39;); // new Date(2010, 11, 10, 14, 11, 12)
 
// 通过自定义的常量来设置日期格式
 
fecha.parse(&#39;5/3/98&#39;, &#39;shortDate&#39;); // new Date(1998, 4, 3)
fecha.parse(&#39;November 4, 2005&#39;, &#39;longDate&#39;); // new Date(2005, 10, 4)

 到很本土化的需求,比如要設置“週一”“星期二”“星期一啦”這種奇怪的需求,或者周一需要設置成“月曜日”,週二要設置成“火曜日”等等

這些需求我們都可以透過在parse和format方法中提到的i18n支援來實現。

透過在fecha.i18n中修改對應的設定即可。

fecha.masks = {
 &#39;default&#39;: &#39;ddd MMM DD YYYY&#39;,
 shortDate: &#39;M/D/YY&#39;,
 mediumDate: &#39;MMM D, YYYY&#39;,
 longDate: &#39;MMMM D, YYYY&#39;,
 fullDate: &#39;dddd, MMMM D, YYYY&#39;,
 shortTime: &#39;HH:mm&#39;,
 mediumTime: &#39;HH:mm:ss&#39;,
 longTime: &#39;HH:mm:ss.SSS&#39;
};

   


Formatting Tokens

對fecha的再次封裝

雖然fecha提供了一些很實用的日期處理方法,但在千奇百怪的需求下,我麼還是需要對fecha進行再封裝,來滿足實際需求。而且透過fecha的封裝,抽離成公用元件,也避免了多個頁面多次進行i18n設定和masks的設定。頁面呼叫時也更加方便。

一個封裝後的fecha公用元件範例

fecha.i18n = {
 dayNamesShort: [&#39;周日&#39;, &#39;周一&#39;, &#39;周二&#39;, &#39;周三&#39;, &#39;周四&#39;, &#39;周五&#39;, &#39;周六&#39;],
 dayNames: [&#39;星期日&#39;, &#39;星期一&#39;, &#39;星期二&#39;, &#39;星期三&#39;, &#39;星期四&#39;, &#39;星期五&#39;, &#39;星期六&#39;],
 monthNamesShort: [&#39;01&#39;, &#39;02&#39;, &#39;03&#39;, &#39;04&#39;, &#39;05&#39;, &#39;06&#39;, &#39;07&#39;, &#39;08&#39;, &#39;09&#39;, &#39;10&#39;, &#39;11&#39;, &#39;12&#39;],
 monthNames: [&#39;一月&#39;, &#39;二月&#39;, &#39;三月&#39;, &#39;四月&#39;, &#39;五月&#39;, &#39;六月&#39;, &#39;七月&#39;, &#39;八月&#39;, &#39;九月&#39;, &#39;十月&#39;, &#39;十一月&#39;, &#39;十二月&#39;],
 amPm: [&#39;上午&#39;, &#39;下午&#39;],
 // D is the day of the month, function returns something like... 3rd or 11th
 DoFn: function (D) {
  return D + [ &#39;th&#39;, &#39;st&#39;, &#39;nd&#39;, &#39;rd&#39; ][ D % 10 > 3 ? 0 : (D - D % 10 !== 10) * D % 10 ];
 }
}

   

利用fecha進行JS日期處理

當其他頁面需要使用日期處理時,只需要在頁面上呼叫fecha元件。

2016-11-20 → 明天 11-20
2016-11-23 → 下周三 11-23
10:00 加上100分钟的时间
...

   

當現有日期處理無法解決實際需求時,只需要在fecha組件中自行添加方法。寫好註釋,後續同事開發相同功能時即可直接調用,提高了團隊了效率。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn