如何在JavaScript表格中显示数据的最后修改时间而非文档修改时间?
解决数据最后修改时间显示问题
核心问题在于数据的last_modified字段没有在更新时同步更新,前端仅负责显示,需从后端数据处理和前端格式化两方面调整:
1. 确保后端数据库与更新逻辑正确
数据库字段配置
如果使用MySQL,直接给last_modified字段设置自动更新规则,数据修改时会自动覆盖为当前时间:
CREATE TABLE 你的表名 ( id INT PRIMARY KEY AUTO_INCREMENT, inkoopprijs DECIMAL(10,2), verkoopprijs DECIMAL(10,2), producten VARCHAR(255), create_date DATETIME DEFAULT CURRENT_TIMESTAMP, -- 新增自动更新规则 last_modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
其他数据库如PostgreSQL可通过触发器实现类似自动更新效果。
后端更新接口调整
若数据库未设置自动更新,在处理编辑请求的PHP代码(如prijswijzigen.php)中,手动更新last_modified字段:
// 处理编辑提交的逻辑示例 if (isset($_GET['edit']) && !empty($_POST)) { $id = $_GET['edit']; $inkoopprijs = $_POST['inkoopprijs']; $verkoopprijs = $_POST['verkoopprijs']; $producten = $_POST['producten']; // 更新语句中手动设置last_modified为当前时间 $updateQuery = "UPDATE 你的表名 SET inkoopprijs = ?, verkoopprijs = ?, producten = ?, last_modified = NOW() WHERE id = ?"; // 用预处理语句执行查询,避免SQL注入 $stmt = $pdo->prepare($updateQuery); $stmt->execute([$inkoopprijs, $verkoopprijs, $producten, $id]); }
2. 前端时间格式化优化
后端返回正确时间后,可用JavaScript将原始时间字符串格式化为更友好的样式:
// 定义时间格式化函数 function formatDateTime(dateString) { const date = new Date(dateString); // 格式化为 YYYY-MM-DD HH:MM:SS 格式 const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); const seconds = String(date.getSeconds()).padStart(2, '0'); return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; } // 渲染表格时调用格式化函数 if(response.length > 0) { for (var count = 0;count < response.length; count++) { html += '<tr>'; html += '<td>' +response[count].id+'</td>'; html += '<td>€'+response[count].inkoopprijs+'</td>'; html += '<td>€'+response[count].verkoopprijs+'</td>'; html += '<td>' +response[count].producten+'</td>'; html += '<td>' + formatDateTime(response[count].create_date) + '</td>'; html += '<td>' + formatDateTime(response[count].last_modified) + '</td>'; html += '<td><a href="../prijswijzigen.php?edit='+response[count].id+'" class="edit_btn">Edit</td>'; html += '<td><a onclick="return confirm(\'确定要删除吗?\')" href="crud.php?del='+response[count].id+'" class="del_btn">Delete</td>'; html += '</tr>'; serial_no++; } }
注:原代码中confirm()未传提示文本,建议补充避免用户误操作。
为什么当前last_modified和create_date相同?
数据创建时last_modified被设为与create_date一致的初始值,但后续修改数据时未更新该字段,导致其值始终停留在创建时间。而document.lastModified是HTML文件本身的修改时间,与数据库单条数据的修改时间无关,无法满足需求。
内容的提问来源于stack exchange,提问作者max lagendijk
相关产品推荐
相关产品推荐

