JavaScript日期库date-fn.js使用方法解析
用JavaScript处理日期并不容易。因此,如果您查看大多数应用程序的package.json文件,通常会在其中找到像Moment.js这样的库。
它对开发人员对解析/格式化/计算日期而言不再那么艰巨,但Moment.js是最早臭名昭著的库之一。
但是您知道一个名为date-fns的库吗?
date-fn官网
date-fns通常被认为是Moment.js的一个有价值的替代品。不仅因为它提供了相同的特性集,而且它还吸引了函数式程序员。
安装date-fns
您可以使用npm/yarn安装date-fns,官方网站:https://date-fns.org/
#Usingnpm $npminstalldate-fns #Orusingyarn $yarnadddate-fns
格式化Date
格式化日期是Moment.js/date-fns之类的库的基本功能,这是因为原生JavaScript没有简单的方法来处理此问题。
date-fns使用类似于Moment.js的字符串模式:
constformat=require('date-fns/format'); conststPattysDay=newDate('2020/03/17'); constformattedDate1=format(stPattysDay,'MM/dd/yyyy'); constformattedDate2=format(stPattysDay,'MMMMdd,yyyy'); console.log(formattedDate1); //=>"03/17/2020" console.log(formattedDate2); //=>"March17,2020"
就这么简单!有很多方法可以格式化日期,使它们看起来与您希望的完全一样。
加/减日期
现在我们可以格式化日期了,那么对日期执行加减法呢?有几个函数可以做到这一点:
- addDays-加天
- subDays-减天
- addWeeks-加周
- subWeeks-减周
- addMonths-加月
- subMonths-减月
在下面的例子中,我们在一个指定的日期上加上1年:
constformat=require('date-fns/format'); constaddYears=require('date-fns/addYears'); conststPattysDay=newDate('2020/03/17'); conststPattysDayNextYear=addYears(stPattysDay,1); constformattedDate=format(stPattysDayNextYear,'MMMMdd,yyyy'); console.log(formattedDate); //=>"March17,2021"
本地化和国际化
格式化很简单,但是locale呢?我们知道用户将从世界各地访问您的网站,我们不想假设他们说我们的母语。
为此,我们可以导入特定的语言环境插件:
constformat=require('date-fns/format'); construssianLocale=require('date-fns/locale/ru'); conststPattysDay=newDate('2020/03/17'); constformattedDate=format(stPattysDay,'MMMMdd,yyyy',{locale:russianLocale}); console.log(formattedDate); //=>"марта17,2020"
国际化支持也很好
比较两个日期
对于一个日期操作库来说,计算两个日期之间的差的能力是非常重要的。date-fns提供了几个函数来计算这个值。
例如,我们可以计算从1月1日到圣诞节的天数(以及“营业日”!):
constformat=require('date-fns/format'); constaddYears=require('date-fns/addYears'); constdifferenceInDays=require('date-fns/differenceInDays'); constdifferenceInBusinessDays=require('date-fns/differenceInBusinessDays') conststartDate=newDate('2020/01/01'); constendDate=newDate('2020/12/24'); constdaysBetween=differenceInDays(endDate,startDate); constworkdaysBetween=differenceInBusinessDays(endDate,startDate); console.log(daysBetween); //=>358 console.log(workdaysBetween); //=>256
date-fns是轻量级的
用Moment.js的最大弊端之一是,它的API无法导入单个函数。
constmoment=require('moment'); constformattedDate=moment(newDate()).format('MM/DD/YYYY'); console.log(formattedDate); //=>"03/17/2020"
使用date-fns,您只需获取所需的特定功能(与Lodash相似):
constformat=require('date-fns/format'); constformattedDate=format(newDate(),'MM/dd/yyyy'); console.log(formattedDate); //=>"03/17/2020"
这使得date-fns的依赖性比Moment.js小得多,有关Moment.js与date-fns的捆绑包大小,请参见下图:
Source:BundlePhobia
总结
date-fns目前似乎比moment.js得到了更多的开发工作,因此,它确实维护得很好。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。