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
相关产品推荐
相关产品推荐

