如何去除toLocaleDateString生成日期中的多余逗号?
解决方案
问题出在en-US本地化规则中,日期与时间组合显示时默认会用逗号分隔。以下是几种可行的解决办法:
方法一:直接替换多余逗号(最简单)
在EJS模板里对生成的日期字符串做替换操作,直接去掉逗号:
<td> <span> <%= topic.createdAt.toLocaleDateString("en-US", options).replace(',', '') %> </span> </td>
这种方式快速直接,因为你的目标格式里只有这一个多余逗号,替换后就能得到9/21 2:09 AM。
方法二:拆分日期与时间后拼接(更稳妥)
如果担心本地化格式后续变化,可以分别生成日期和时间部分,再手动拼接:
方案A:后端预处理(推荐,模板更简洁)
修改你的GET路由,提前为每个话题生成格式化好的日期字段:
router.get("/", async function (req, res, next) { const dateOpts = { month: "numeric", day: "numeric" }; const timeOpts = { hour: "numeric", minute: "2-digit" }; const [list_topic] = await Promise.all([ Topic.find().sort({ createdAt: -1 }).exec(), ]); // 为每个话题添加预格式化的日期属性 const formattedTopics = list_topic.map(topic => { const datePart = topic.createdAt.toLocaleDateString("en-US", dateOpts); const timePart = topic.createdAt.toLocaleTimeString("en-US", timeOpts); // 转成普通对象才能添加新属性 return { ...topic.toObject(), formattedTime: `${datePart} ${timePart}` }; }); res.render("index", { list_topic: formattedTopics }); });
然后在EJS模板里直接使用预生成的字段:
<td> <span> <%= topic.formattedTime %> </span> </td>
方案B:模板内直接拼接
不想修改后端的话,也可以在EJS里直接拆分生成:
<td> <span> <%= `${topic.createdAt.toLocaleDateString("en-US", {month: "numeric", day: "numeric"})} ${topic.createdAt.toLocaleTimeString("en-US", {hour: "numeric", minute: "2-digit"})}` %> </span> </td>
你之前拆分时出现EJS错误,大概率是模板语法问题(比如变量未定义、括号不匹配),上面的写法都是标准EJS语法,不会有类似问题。
内容的提问来源于stack exchange,提问作者Dagger
相关产品推荐
相关产品推荐

