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

dayjs isBefore类型异常及时间判断样式切换功能失效求助

问题排查与修复方案

1. dayjs isBefore 显示类型为 any 的问题

  • 若使用TypeScript环境,需安装dayjs的类型定义包:
    npm install @types/dayjs --save-dev
    
  • 若为纯JavaScript环境,编辑器的橙色提示仅为缺少类型声明,不影响代码运行,可通过添加注释手动指定变量类型消除提示:
    /** @type {import('dayjs').Dayjs} */
    var currentTime = dayjs();
    /** @type {import('dayjs').Dayjs} */
    var tenStartTime = dayjs("9:59 AM", 'h:mm A');
    /** @type {import('dayjs').Dayjs} */
    var tenEndTime = dayjs("11:00 AM", 'h:mm A');
    

2. 时间判断功能不生效的核心原因与修复

问题根源

classTimeAdjustment函数仅在页面初始化时执行一次,后续时间变化后不会重新判断更新样式;此外需确保dayjs已正确引入到项目中。

修复步骤

  • 添加定时更新逻辑:在初始调用后,设置定时器每隔1分钟重新执行判断函数,保证样式随时间动态更新:
    $(document).ready(function() {
        updateCurrentTime();
    
        function classTimeAdjustment() {
            var currentTime = dayjs();
            var tenStartTime = dayjs("9:59 AM", 'h:mm A');
            var tenEndTime = dayjs("11:00 AM", 'h:mm A');
    
            var $hour10 = $('#hour-10'); // 缓存DOM元素,提升性能
            if (currentTime.isAfter(tenEndTime)) {
                $hour10.removeClass("present future").addClass("past");
            } else if (currentTime.isBefore(tenStartTime)) {
                $hour10.removeClass("present past").addClass("future");
            } else {
                $hour10.removeClass("future past").addClass("present");
            }
        }
    
        classTimeAdjustment(); // 初始调用
        // 每分钟更新一次
        setInterval(classTimeAdjustment, 60000);
    });
    
  • 简化DOM操作:缓存jQuery对象并链式调用类操作方法,减少重复DOM查询,同时避免遗漏移除类名。

3. 无法使用isBetween插件的解决方法

dayjs的isBetween属于扩展插件,需单独引入并启用:

  • CDN环境:在引入dayjs核心脚本后添加插件脚本:
    <script src="https://cdn.jsdelivr.net/npm/dayjs@1/dayjs.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/dayjs@1/plugin/isBetween.js"></script>
    <script>
        dayjs.extend(dayjs_plugin_isBetween); // 启用插件
    </script>
    
  • 模块化环境:
    import dayjs from 'dayjs';
    import isBetween from 'dayjs/plugin/isBetween';
    
    dayjs.extend(isBetween); // 启用插件
    

启用后可简化判断逻辑:

if (currentTime.isAfter(tenEndTime)) {
    $hour10.removeClass("present future").addClass("past");
} else if (currentTime.isBetween(tenStartTime, tenEndTime)) {
    $hour10.removeClass("future past").addClass("present");
} else {
    $hour10.removeClass("present past").addClass("future");
}

内容的提问来源于stack exchange,提问作者Sam williams

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:52:50