You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在EJS中截取日期对象的时间戳——JavaScript、HTML、Node.js

解决EJS中日期截取无内容的问题

我完全懂你现在的困扰——在EJS页面循环展示对象时,完整日期能正常显示,但一尝试截取日期里的时间戳部分就啥都不出来了,这确实挺闹心的。咱们一步步来排查解决:

先搞清楚核心问题:日期的类型是关键

你能看到完整日期,但截取后无内容,大概率是因为你直接对Date对象用了字符串截取方法(比如slice),而不是先把它转成字符串。当然也有可能是日期字符串的格式和你预期的不一样,或者属性值为空。

分情况给出解决方案

情况1:你的date属性是Date对象

如果是从数据库(比如MongoDB)拿到的Date对象,直接调用slice会失效,因为Date对象本身没有这个方法。你需要先把它转成字符串,再截取:

<% maps.forEach(function(map) { %>
  <div class="map-card">
    <!-- 完整日期展示 -->
    <p>完整日期:<%= map.date %></p>
    <!-- 转成ISO字符串后截取YYYY-MM-DD部分 -->
    <p>日期部分:<%= map.date.toISOString().slice(0, 10) %></p>
    <!-- 或者用本地化日期格式,更友好 -->
    <p>本地化日期:<%= map.date.toLocaleDateString('zh-CN') %></p>
  </div>
<% }) %>

情况2:你的date属性是字符串,但格式不符合预期

先把完整的日期字符串打印出来,确认它的格式(比如是"2024-05-20T12:34:56"还是"2024/05/20 12:34"),再调整截取的索引:

<% maps.forEach(function(map) { %>
  <div class="map-card">
    <!-- 先打印完整字符串,确认格式 -->
    <p>完整日期字符串:<%= map.date %></p>
    <!-- 根据实际格式修改slice参数,比如格式是YYYY/MM/DD HH:mm,就取前10位 -->
    <p>截取后的日期:<%= map.date.slice(0, 10) %></p>
  </div>
<% }) %>

情况3:防止date属性为空导致的渲染失败

有时候对象的date属性可能是nullundefined,直接调用方法会报错,导致页面部分内容不显示。可以加个条件判断:

<% maps.forEach(function(map) { %>
  <div class="map-card">
    <p>日期:<%= map.date ? map.date.toISOString().slice(0, 10) : '无日期数据' %></p>
  </div>
<% }) %>

小提示

如果还是有问题,可以在EJS里用<% console.log(map.date) %>把日期值打印到控制台,看看它的类型和具体内容,这样更容易定位问题。

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

火山引擎 最新活动