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

Java Servlet传递日期字符串异常:浏览器将日期解析为计算值

解决浏览器将日期字符串解析为除法运算的问题

嘿,这个坑我之前踩过!你遇到的问题核心就是:浏览器把22/01/2019这种带斜杠的字符串当成了连续除法运算——22÷1÷2019,算出来可不就是那些奇怪的数字嘛😅。要让浏览器把它当成纯字符串处理,我们可以从这几个环节入手:

1. 后端Servlet确保传递的是字符串类型的JSON值

检查你创建JsonPrimitive的代码,一定要明确用字符串构造,避免让JSON库自动把斜杠格式的内容误判为数值相关类型:

// 正确:直接传入格式化后的日期字符串
JsonPrimitive datePrimitive = new JsonPrimitive("22/01/2019");

// 错误示例:如果是从Date对象转换,务必先格式化为字符串再封装
// 不要直接传Date对象或者未格式化的数值

2. 生成HTML调用代码时给日期参数加引号

这是最关键的一步!你生成的JavaScript调用代码里,日期参数必须是带引号的字符串字面量,而不是裸写的表达式。比如:

  • 错误生成的代码:showDueDateUpdateDialogue(123, 22/01/2019) → 浏览器会执行除法
  • 正确生成的代码:showDueDateUpdateDialogue('123', '22/01/2019') → 浏览器识别为字符串

如果你用的是JSP或者模板引擎生成HTML,可以这样处理:

<% 
String inNo = "123";
String dateStr = "22/01/2019";
%>
<button onclick="showDueDateUpdateDialogue('<%= inNo %>', '<%= dateStr %>')">更新截止日期</button>

3. 前端函数内部做类型兜底处理

为了保险起见,在showDueDateUpdateDialogue函数里强制把日期参数转成字符串,避免意外的类型解析:

function showDueDateUpdateDialogue(in_no, date) {
  // 强制转为字符串,确保不会被当作运算处理
  const formattedDate = String(date);
  console.log(formattedDate); // 现在输出的就是"22/01/2019"了
  
  // 后续对话框展示逻辑使用formattedDate即可
}

总结

本质就是要让浏览器明确知道这个值是字符串而非可执行的表达式。从后端传递、前端生成调用代码、函数内部处理三个环节都可以加固,其中给参数加引号是最直接有效的办法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:31:11