Dayjs relativeTime阈值配置不生效问题求助
Dayjs relativeTime插件自定义阈值不生效问题解决
你遇到的问题是自定义的relativeTime阈值未被插件正确读取,导致仍使用默认的25天阈值(超过25天即显示月份单位)。以下是具体解决方法:
1. 确认Dayjs版本兼容性
Dayjs在1.10.0版本后才支持relativeTime插件的自定义阈值和取整配置。如果你的版本低于这个版本,先升级到最新版:
npm install dayjs@latest
2. 修正配置传递方式
确保扩展插件时直接传递配置对象(避免变量引用可能带来的意外问题),修改后的代码如下:
import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; // 扩展插件并传入自定义配置 dayjs.extend(relativeTime, { thresholds: [ { l: 's', r: 1 }, { l: 'm', r: 1 }, { l: 'mm', r: 59, d: 'minute' }, { l: 'h', r: 1 }, { l: 'hh', r: 23, d: 'hour' }, { l: 'd', r: 1 }, { l: 'dd', r: 29, d: 'day' }, // 将天的阈值设为29 { l: 'M', r: 1 }, { l: 'MM', r: 11, d: 'month' }, { l: 'y' }, { l: 'yy', d: 'year' }, ], rounding: Math.floor });
3. 检查是否重复扩展插件
如果代码中存在多次dayjs.extend(relativeTime)调用,后续的扩展会覆盖之前的配置。确保只在一处扩展插件并传入自定义配置。
4. 备选方案:直接修改插件默认配置
如果上述方法仍不生效,可以直接修改插件的默认配置(绕过extend的配置传递逻辑):
import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; // 先扩展插件 dayjs.extend(relativeTime); // 直接修改插件的默认阈值和取整函数 relativeTime.thresholds = [ { l: 's', r: 1 }, { l: 'm', r: 1 }, { l: 'mm', r: 59, d: 'minute' }, { l: 'h', r: 1 }, { l: 'hh', r: 23, d: 'hour' }, { l: 'd', r: 1 }, { l: 'dd', r: 29, d: 'day' }, { l: 'M', r: 1 }, { l: 'MM', r: 11, d: 'month' }, { l: 'y' }, { l: 'yy', d: 'year' }, ]; relativeTime.rounding = Math.floor;
验证结果
配置完成后,执行dayjs('2022-01-01').to(dayjs('2022-01-28'))会输出27 days(实际日期差为27天),符合你的预期阈值逻辑。
内容的提问来源于stack exchange,提问作者abellay
相关产品推荐
相关产品推荐

