比较流行的JavaScript日期库。
MomentJS是软件工程师中使用最多的JavaScript日期库之一。然而,在过去的几年里,其他的替代品挑战了它的存在。
其中,Date-fns是接替MomentJS的主要竞争对手之一。
因此,在这篇文章中,我将讨论Date-fns的特点,它的闪光点,以及它的局限性,让你有一个更好的了解。
了解Date-fns及其用法
在JavaScript中处理日期并不是一件容易的事。即使是MomentJS,我们也必须创建一个Moment对象并使用该对象的方法。
Date-fns通过提供各种函数简化了JavaScript的数据操作。
它提供了200多个不同的与时间有关的函数,与MomentJS不同,它允许你根据需要导入一组选定的函数。
例如,如果你需要打印星期几,你只需要导入format函数,然后用所需的JavaScript日期格式参数传递日期。
// Install date-fns library
npm i date-fns
// Usage
import { format } from 'date-fns';
你知道Date-fns每周有超过10,750K的NPM下载和26.5K的GitHub星级吗?
下图显示了这些MomentJS和Date-fns之间的npm趋势对比。我们可以清楚地看到Date-fns的上升趋势,而MomentJS似乎失去了它的吸引力。
www.npmtrends.com/date-fns-vs…
但是,这还不是全部;Date-fns有一些惊人的功能来吸引开发者。
所以,让我们多讨论一下这些功能,看看它与MomentJS有什么不同。
1.每个文件的功能
Date-fns库由各种函数组成,它允许你根据需要单独导入这些函数。
例如,如果你需要得到2天之间的距离,你只需要导入formatDistance和subDays函数。
import { formatDistance, subDays } from ‘date-fns’ formatDistance(subDays(new Date(), 3), new Date())
但是,如果你使用MomentJS,你将不得不一次性导入所有的函数,因为MomentJS将其所有的函数作为一个成员函数。
Date-fns的这种行为不仅使你的导入变得简单,而且也大大减少了应用程序包的大小。
2.日期代码是不可变的
可变性是我们在使用MomentJS工作时面临的另一个困难。例如,由于MomentJS的日期对象会改变自己的状态,有时日期值会发生意外的变化。
Date-fns通过从我们运行的每个函数中提供一个新的JavaScript日期对象实例来解决这个问题,这无疑可以帮助你避免不必要的修改。
3.支持超过50个地区性语言
如果你的目标客户是国际人士,那么Date-fns是处理日期和时间相关操作的完美解决方案。
它支持50多个地区性语言,你可以很容易地导入你所需要的语言,并按以下方式使用它们。
import { formatDistance } from ‘date-fns’
const result = formatDistance(
除此以外,他们还邀请开发者扩大本地化支持。如果你有兴趣,你可以按照Date-fns团队提供的指南,为该库增加新的语言支持。
4.它是快速和紧凑的
如果我们考虑性能,MomentJS由于其复杂的API和包的大小而有明显的性能问题。
MomentJS的包大小约为232 kB,而Date-fns的包大小为300 Bytes。
Date-fns与MomentJS的性能对比
然而,我需要亲自看看性能差异,我在GitHub上发现了José Mussa的这个惊人的基准比较项目。因此,我做了一些修改,并进行了3次测试,看看结果如何。
JavaScript添加日期的天数vs JavaScript日期时间的年份vs JavaScript日期格式的解析
正如你所看到的,Date-fns在所有3个操作中,在每秒执行的操作和大小方面都遥遥领先,简单的API是这背后的主要原因。
5.其他功能
正如你所看到的,Date-fns在每秒执行的操作和规模方面在所有3个操作中都遥遥领先,简单的API是背后的主要原因。
用Bit构建和分享独立的JS组件
比特是一个可扩展的工具,可以让你用_独立_编写、版本和维护的组件创建_真正的模块化_应用程序 。
用它来构建模块化的应用程序和设计系统,编写和交付微前端和微服务,或者只是在应用程序之间共享组件。
一个独立的源码控制和共享的 "卡 "组件(右边是它的依赖关系图,由Bit自动生成的
总结
在这篇文章中,我讨论了为什么Date-fns已经成为JavaScript中的首选解决方案,而不是MomentJS。
MomentJS确实存在了很长时间,而且它有很好的功能。但是,它还没能跟上现代的要求。
在试用了MomentJS和Date-fns之后,我建议在未来的项目中使用Date-fns而不是MomentJS,因为它提供了MomentJS的所有功能,同时保持了速度、大小和特性。
所以,我邀请你在你的下一个项目中尝试使用Date-fns,并在评论区与其他人分享你的想法。
谢谢您的阅读!!
了解更多
Date-fns vs MomentJS: Choosing the Right Date Utility Library最初发表于Bits and Pieceson Medium,人们在这里通过强调和回应这个故事来继续对话。