如何在EJS中实现专门的时间格式化操作?
EJS中纯时间类型调用getHours/getMinutes无效的解决方案
问题根因
从数据库获取的纯时间值不属于JavaScript Date 实例类型,通常为 HH:mm:ss 格式的字符串,无法直接调用Date原型上的getHours、getMinutes方法。
可用解决方案
方案1:EJS内转换为Date对象后调用方法
给纯时间拼接一个无影响的固定日期前缀,构造合法Date实例即可正常调用相关方法:
<% // 假设从后端传入的纯时间字段为 dbTime,格式为 HH:mm:ss const formattedDate = new Date(`1970-01-01 ${dbTime}`) const hours = formattedDate.getHours() const minutes = formattedDate.getMinutes() %> <!-- 格式化输出示例 --> <span>当前时间:<%= hours %>点<%= minutes %>分</span>
方案2:直接切割字符串(更适合固定格式的纯时间)
如果纯时间格式固定为冒号分隔的时分结构,不需要转Date,直接拆分字符串取值即可,性能更高:
<% // 按冒号拆分后转数字,直接取前两位的时分 const [hours, minutes] = dbTime.split(':').map(Number) %>
方案3:后端返回前预处理(可选)
如果使用Node.js作为后端,可在返回数据前就将纯时间转换为可直接读取的时分格式,无需EJS端二次处理:
// Node.js 后端处理示例 const dbTime = row.time // 从数据库拿到的纯时间字符串 const [hours, minutes] = dbTime.split(':').map(Number) // 把处理好的时分传给EJS模板 res.render('page', { hours, minutes })
注意事项
如果数据库返回的时间带毫秒后缀(如 14:25:30.456),拆分后只取前两位元素即可,不会影响时分取值。
内容的提问来源于stack exchange,提问作者Dev Dhawan
相关产品推荐
相关产品推荐

