介紹
datefns為瀏覽器中操作JAVAScript日期提供了最全面、最簡單、最一致的工具集,并且可以在node.js中使用!常見的類似的庫還有moment.js和day.js!
Github
https://github.com/date-fns/date-fns
特性
- 模塊化
只是用需要使用的功能,可以很好地與webpack, Browserify, 或者 Rollup集成
- 原生日期
date-fns不會重新造輪子,而是使用現有的本機類型。此外,出于安全考慮,它不會擴展核心對象。date-fns中的函數可以正常工作,在某些情況下會遵循ECMAScript行為。
- 純函數
date-fns是使用純函數構建的,并且始終返回新的日期實例,而不是更改傳遞的實例。這有助于防止錯誤并避免長時間的調試會話。
- 支持Typescript和Flow
date-fns支持Flow和TypeScript
- 國際化
支持幾十種語言,當然包括了簡體中文,只有當你需要使用的時候才會包括進來
- 一致性
它總是返回同一時區中的日期,不管傳遞的是時間戳、字符串還是日期對象。該API經過定制,具有可預測的名稱和參數順序。
- 可靠性
datefns尊重時區和夏時制。它遵循語義版本控制,因此始終向后兼容。每個構建CI在大約400個時區檢查超過650000個示例
- 簡單
最好的API是不存在API。對于date fns,你總是有一個函數可以做一件事。并且總是有一個單一的方法來解決問題。
- 性能好
除了體積小之外,date-fns速度很快。
- 詳細的文檔
每個函數都有一個詳細的例子說明。由于JSDoc注釋,文檔可以在線(在網站上)和離線訪問。
示例
- 格式化
import { format, formatDistance, formatRelative, subDays } from 'date-fns'
format(new Date(), "'Today is a' iiii")
//=> "Today is a Thursday"
formatDistance(subDays(new Date(), 3), new Date())
//=> "3 days ago"
formatRelative(subDays(new Date(), 3), new Date())
//=> "last Friday at 7:26 p.m."
- 國際化
import { formatRelative, subDays } from 'date-fns'
import { es, ru } from 'date-fns/locale'
formatRelative(subDays(new Date(), 3), new Date())
//=> "last Friday at 7:26 p.m."
formatRelative(subDays(new Date(), 3), new Date(), { locale: es })
//=> "el viernes pasado a las 19:26"
formatRelative(subDays(new Date(), 3), new Date(), { locale: ru })
//=> "в прошлую пятницу в 19:26"
- 日常使用
import { addYears, formatWithOptions, toUpper } from 'date-fns/fp'
import { eo } from 'date-fns/locale'
const addFiveYears = addYears(5)
const dateToString = formatWithOptions({ locale: eo }, 'D MMMM YYYY')
const dates = [
new Date(2017, 0, 1),
new Date(2017, 1, 11),
new Date(2017, 6, 2)
]const toUpper = arg => String(arg).toUpperCase()
const formattedDates = dates.map(addFiveYears).map(dateToString).map(toUpper)
//=> ['1 JANUARO 2022', '11 FEBRUARO 2022', '2 JULIO 2022']
總結
不論是moment.js或者day.js亦或是datefns都是JavaScript中處理日期非常好的庫,也避免了很多日期處理中的很多問題!