首页 > 解决方案 > 日期 fns 的 isSameOrBefore 实现

问题描述

由于 moment 已被弃用,我决定从我的整个项目中隐藏 moment,并考虑使用 datefns 作为替代。当我浏览代码文件时,我遇到了一句话,

moment(date1).isSameOrBefore(date2, year);

我开始寻找与该功能类似的东西,但不幸的是,date-fns 没有任何东西可以执行基于精度的比较(即:年、月或日期比较)?任何人都可以建议一些使用 date-fns 的解决方法吗?

标签: javascriptmomentjsdate-fns

解决方案


使用startOfSOMETHING()您可以使用分钟、小时、日、月 ecc 来检查日期是否早于或相同以比较它们。

const dateBefore = dateFns.startOfHour(new Date(1988, 9, 26, 05, 35));
const dateSame = dateFns.startOfHour(new Date(1988, 9, 26, 11, 55));
const dateAfter = dateFns.startOfHour(new Date(1988, 9, 26, 16, 50));

const limit = dateFns.startOfHour(new Date(1988, 9, 26, 11, 55));

// dateBefore < limit => is before
if (dateFns.isBefore(dateBefore, limit) || dateFns.isEqual(dateBefore, limit)) console.log(dateFns.format(dateBefore), 'is before');
else console.log('is not before');

// dateSame === limit => is same
if (dateFns.isBefore(dateSame, limit) || dateFns.isEqual(dateSame, limit)) console.log(dateFns.format(dateSame), 'is same');
else console.log('is not same');

// dateAfter > limit =>  is after
if (dateFns.isBefore(dateAfter, limit) || dateFns.isEqual(dateAfter, limit)) console.log('you mustnt see that message ');
else console.log(dateFns.format(dateAfter), 'is after');
<script src="https://cdnjs.cloudflare.com/ajax/libs/date-fns/1.28.5/date_fns.min.js"></script>

在我看来,这个库很糟糕,我更喜欢与 moment.js 非常相似的 day.js 或用new Date()Javascritp 详细说明日期。


推荐阅读