You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 11:55:22