如何在JavaScript中实现表格内Timestamp转Datetime?
解决方法:在页面加载后用JavaScript批量转换时间戳
我明白你的问题了——你直接在表格单元格里写convertTimestamp({!dt.timestamp});的方式是行不通的,因为服务器渲染页面时,只会把这段代码当成纯文本输出,浏览器不会自动执行它。咱们换个思路,通过先存储时间戳、再在页面加载后批量转换的方式来实现:
步骤1:修改HTML,把时间戳存在单元格的属性里
把原来的Date列的<td>改成下面这样,把时间戳存储在自定义的data-timestamp属性中,而不是直接写函数调用:
<td data-timestamp="{!dt.timestamp}"></td>
服务器渲染后,每个这个单元格都会带上类似data-timestamp="1488966492914"的属性,方便后续JavaScript读取。
步骤2:添加页面加载后的批量转换逻辑
在你的JavaScript代码末尾,添加一段监听页面加载完成的逻辑,遍历所有带data-timestamp属性的单元格,调用转换函数并填充结果:
function addZero(i) { if (i < 10) { i = "0" + i; } return i; } function convertTimestamp(pTimestamp) { var result = new Date(pTimestamp); var dd = addZero(result.getDate()); var mm = addZero(result.getMonth() + 1); // January is 0! var yyyy = result.getFullYear(); var HH = addZero(result.getHours()); var min = addZero(result.getMinutes()); result = yyyy + '/' + mm + '/' + dd + ' ' + HH + ':' + min; return result; } // 页面加载完成后执行转换逻辑 window.addEventListener('DOMContentLoaded', function() { // 获取表格中所有带data-timestamp属性的单元格 const timestampCells = document.querySelectorAll('#resulttable td[data-timestamp]'); // 遍历每个单元格,转换时间戳并填充内容 timestampCells.forEach(cell => { // 取出时间戳并转成数字(因为属性值是字符串) const timestamp = parseInt(cell.getAttribute('data-timestamp')); // 调用转换函数,把结果写入单元格 cell.textContent = convertTimestamp(timestamp); }); });
为什么这样能生效?
- 服务器先完成页面渲染,把每个记录的时间戳存在对应单元格的
data-timestamp属性里; - 当页面完全加载后,JavaScript会自动触发
DOMContentLoaded事件,遍历所有目标单元格; - 对每个单元格,取出时间戳、调用你的转换函数,最后把格式化后的时间写入单元格,这样就能显示你想要的
2017/03/08 04:48格式了。
内容的提问来源于stack exchange,提问作者Rival
相关产品推荐
相关产品推荐

