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

升级至Discord.js 14.0.3版本时出现Date.js TypeError错误

解决Discord.js 14.0.3升级后的Date.js TypeError问题

升级Discord.js至14.0.3版本后,出现以下错误:

/home/container/node_modules/datejs/src/core/parser.js:106
                        ords = s.match(/\b(\d+)(?:st|nd|rd|th)\b/); // find ordinal matches
                                 ^
TypeError: s.match is not a function
    at Object.removeOrds (/home/container/node_modules/datejs/src/core/parser.js:106:13)
    at Function.parse (/home/container/node_modules/datejs/src/core/parser.js:147:47)
    at new Activity (/home/container/node_modules/discord.js/src/structures/Presence.js:241:34)
    at /home/container/node_modules/discord.js/src/structures/Presence.js:89:57
    at Array.map (<anonymous>)
    at Presence._patch (/home/container/node_modules/discord.js/src/structures/Presence.js:89:41)
    at PresenceManager._add (/home/container/node_modules/discord.js/src/managers/CachedManager.js:36:18)
    at PresenceManager._add (/home/container/node_modules/discord.js/src/managers/PresenceManager.js:22:18)
    at PresenceUpdateAction.handle (/home/container/node_modules/discord.js/src/client/actions/PresenceUpdate.js:29:41)
    at Object.module.exports [as PRESENCE_UPDATE] (/home/container/node_modules/discord.js/src/client/websocket/handlers/PRESENCE_UPDATE.js:4:33)
    at WebSocketManager.handlePacket (/home/container/node_modules/discord.js/src/client/websocket/WebSocketManager.js:352:31)
    at WebSocketShard.onPacket (/home/container/node_modules/discord.js/src/client/websocket/WebSocketShard.js:481:22)
    at WebSocketShard.onMessage (/home/container/node_modules/discord.js/src/client/websocket/WebSocketShard.js:321:10)
    at WebSocket.onMessage (/home/container/node_modules/discord.js/node_modules/ws/lib/event-target.js:199:18)
    at WebSocket.emit (node:events:527:28)
    at Receiver.receiverOnMessage (/home/container/node_modules/discord.js/node_modules/ws/lib/websocket.js:1178:20)
Node.js v17.9.1

问题原因

该错误源于Date.js的removeOrds函数中,传入的参数s并非字符串类型,导致调用match方法失败。Discord.js v14在处理用户状态(Presence)中的活动(Activity)时,传递给Date.js的参数类型不符合预期;且Date.js是一个停止维护的老旧库,对现代JS环境的类型兼容性较差。

解决方案

方案一:移除Date.js依赖

如果项目未直接使用Date.js,它大概率是其他依赖的间接依赖,直接卸载即可:

npm uninstall datejs

Discord.js v14本身已内置日期处理能力,无需依赖第三方的Date.js。

方案二:替换为现代日期库

若项目确实需要日期处理功能,建议用活跃维护的现代库(如date-fns或luxon)替代Date.js:

  1. 安装替代库:
    npm install date-fns
    
  2. 替换项目中Date.js的调用,例如:
    // 原Date.js代码
    Date.parse('2024-05-20')
    // 替换为date-fns
    import { parseISO } from 'date-fns'
    parseISO('2024-05-20')
    

方案三:临时修改Date.js代码(不推荐)

若暂时无法替换或移除Date.js,可临时修改其源码添加类型检查:
打开node_modules/datejs/src/core/parser.js,修改removeOrds函数:

function removeOrds(s) {
    // 新增类型检查,确保参数为字符串
    if (typeof s !== 'string') return s;
    ords = s.match(/\b(\d+)(?:st|nd|rd|th)\b/); // find ordinal matches
    // 原函数剩余代码保持不变
}

注意:此修改会在依赖更新后失效,仅作为应急临时方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:06:22