大家好,我是农村程序员,独立开发者,前端之虎陈随易。
这是我的个人网站:chensuiyi.me。
我的所以文章都可以在我的个人网站找到,欢迎访问,也欢迎与我交朋友。
笔者在多年的职业生涯中,用过很多 js 日期时间操作库,如今唯爱这一个,它就是 date-fns
。
这是一个拥有 200多个
日期时间函数的集合,堪称日期时间中的 Lodash
。
支持按需导出,最大可能地降低打包体积,也支持函数式,链式调用风格。
当前维护非常积极,star 数 35k
,提交了 2000多次
,近 400个
代码贡献者,被超过 400万
个项目所依赖使用。
2024年9月份发布了 v4
大版本,支持不同时区的时间操作和互转等,特点如下图。
话不多说,看几个示例:
格式化
js
import { format, formatDistance, formatRelative, subDays } from 'date-fns';
format(new Date(), "'Today is a' eeee");
//=> "Today is a Saturday"
formatDistance(subDays(new Date(), 3), new Date(), { addSuffix: true });
//=> "3 days ago"
formatRelative(subDays(new Date(), 3), new Date());
//=> "last Friday at 7:26 p.m."
国际化
js
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"
组合与函数式
js
import { addYears, formatWithOptions } 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']
可以看到,这操作,非常地 Lodash
!
不过呢,官方文档,笔者每次查看都感觉有点不方便。
所以,特意根据官方文档制作了一份中文文档,点击查看 date-fns 中文文档。
不过,笔者目前还没翻译完毕,还在持续进行中,感兴趣的朋友可以先提前关注一下,也欢迎与我微信交流探讨。
那么关于 date-fns
的安利,基本就结束了,本身就是一个函数库而已,没有太多可以细说的地方。
由于笔者比较八卦,我们来看一看 date-fns
周边的数据和信息。
日期时间的操作,是一个非常基础且重要的领域。
果不其然地,这个项目的赞助者非常之多,不乏很多出名的产品和公司。
截至目前,共收到了近 23 万美元的赞助。
项目的发起者是 Sasha
,是一个独立开发者,自2017年起,就一直全职在做开源项目,目前和一家人生活在新加坡。
笔者发现,国外的独立开发者,不依托于公司而具备赚钱和生存能力的人有不少。
这确实是一个非常不错的生活方式,可以自由地选择自己觉得舒适的生活。
笔者目前也是独立开发者,2024年,是笔者做自由职业的地 4 第四年,做全职独立开发的第1年,目前超过 10 个产品有或多或少的收益。
如果对独立开发感兴趣,欢迎与我交流探讨。