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

EJS传递日期字符串异常:参数值被篡改问题咨询

EJS 2.5.8日期字符串被篡改的问题解决办法

我之前也踩过EJS 2.5.8这个坑!当你传递像"2018-5-3"这种AAAA-M-D格式的日期字符串参数时,模板里用<%= date %>输出会得到2010,这可不是什么玄学bug,是EJS的解析逻辑在搞事情。

问题根源

EJS的<%= %>标签会把内部内容当作JavaScript表达式解析,而非纯字符串输出。当你写<%= date %>时,渲染后的代码会变成2018-5-3——这在JS里会被识别成减法运算:2018 - 5 - 3 = 2010,所以最终输出的就是这个计算结果。

解决办法

这里有几个靠谱的解决方式:

  • 给输出加引号:在模板里把日期字符串用引号包裹,强制让它以字符串形式输出:
    console.log("<%= date %>")
    
    渲染后会变成console.log("2018-5-3"),就能正确输出原日期字符串了。
  • 用JSON.stringify转义:如果需要处理特殊字符或者追求更稳妥的字符串输出,用JSON.stringify是个好选择:
    console.log(<%- JSON.stringify(date) %>)
    
    它会自动给字符串加上引号,还能处理包含引号等特殊字符的场景。
  • 升级EJS版本:这个问题在EJS 3.x及以上版本中已经被修复,直接更新到最新版EJS,就能彻底避免这种把字符串误解析成表达式的问题。

错误示例 vs 正确示例

错误写法(输出2010):

console.log(<%= date %>)

正确写法(输出2018-5-3):

console.log("<%= date %>")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:06:44