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

Node.js酒店日报项目:用EJS实现2小时内活动实时展示

解决EJS中判断活动是否在2小时内的问题

有两种可行方案,推荐优先采用后端处理的方式,逻辑更清晰且性能更优:

方案1:Node.js后端预处理数据

在将dailyData传递给EJS模板前,先给每个活动添加一个标记字段(比如isUpcoming),标记其是否属于「2小时内即将开始」的活动。

示例代码:

// Node.js 路由/控制器代码
const dailyData = [
  // 模拟活动数据
  { name: "卡拉OK", time: "2024-05-20 14:30:00" },
  { name: "自助晚餐", time: "2024-05-20 18:00:00" }
];

// 计算当前时间与2小时后的时间戳
const now = new Date();
const twoHoursLater = new Date(now.getTime() + 2 * 60 * 60 * 1000);

// 遍历数据并添加状态标记
const processedData = dailyData.map(item => {
  const eventTime = new Date(item.time);
  // 判断活动时间是否在当前时间之后、且不超过2小时范围
  const isUpcoming = eventTime > now && eventTime <= twoHoursLater;
  return { ...item, isUpcoming };
});

// 将处理后的数据传给EJS模板
res.render('index', { dailyData: processedData });

随后在EJS首页模板中直接通过if判断标记:

<!-- 首页EJS模板 -->
<h3>即将开始的活动(2小时内)</h3>
<ul>
  <% dailyData.forEach(item => { %>
    <% if (item.isUpcoming) { %>
      <li><%= item.name %> - <%= item.time %></li>
    <% } %>
  <% }) %>
</ul>

方案2:直接在EJS模板中判断

若不想修改后端逻辑,也可直接在EJS模板内完成时间判断,但需注意时间格式的兼容性:

<!-- 首页EJS模板 -->
<h3>即将开始的活动(2小时内)</h3>
<ul>
  <% const now = new Date(); %>
  <% const twoHoursLater = new Date(now.getTime() + 2 * 60 * 60 * 1000); %>
  <% dailyData.forEach(item => { %>
    <% const eventTime = new Date(item.time); %>
    <% if (eventTime > now && eventTime <= twoHoursLater) { %>
      <li><%= item.name %> - <%= item.time %></li>
    <% } %>
  <% }) %>
</ul>

注意事项

  • 确保item.time的格式能被new Date()正确解析,推荐使用ISO 8601格式(如2024-05-20T14:30:00),避免因格式不兼容导致判断错误。
  • 若涉及跨时区场景,需统一时间基准(比如转为UTC时间后再比较),避免本地时区差异引发的判断偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:33:18