- 表单中显示当前时间:在用户填写表单时,自动填充当前时间,让用户看到。
- 后台处理并保存时间:当表单提交到服务器后,PHP代码将这个时间(或服务器当前时间)存入数据库。
下面我将分两种最常见的场景来详细讲解实现方法。

(图片来源网络,侵删)
在前端表单中显示当前时间(用户可见)
这种情况通常用于让用户知道他们提交信息的具体时间,或者让他们修改时间,这主要通过JavaScript实现。
示例:在表单中添加一个文本输入框,并自动填入当前时间。
HTML/JS 代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">提交表单</title>
<script type="text/javascript">
// 页面加载完成后执行
window.onload = function() {
// 1. 获取当前时间
var now = new Date();
// 2. 格式化时间,格式为:YYYY-MM-DD HH:MM:SS
// padStart函数用于补零,'7' 会变成 '07'
var year = now.getFullYear();
var month = (now.getMonth() + 1).toString().padStart(2, '0');
var day = now.getDate().toString().padStart(2, '0');
var hours = now.getHours().toString().padStart(2, '0');
var minutes = now.getMinutes().toString().padStart(2, '0');
var seconds = now.getSeconds().toString().padStart(2, '0');
var formattedTime = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
// 3. 将格式化后的时间填入ID为 "submit_time" 的文本框中
document.getElementById("submit_time").value = formattedTime;
}
</script>
</head>
<body>
<form action="/plus/diy.php" method="post" enctype="multipart/form-data">
<!-- ... 其他表单字段 ... -->
<!-- 时间输入框,用户可以看到也可以修改 -->
<div>
<label for="submit_time">提交时间:</label>
<input type="text" id="submit_time" name="submit_time" readonly />
</div>
<button type="submit">提交</button>
</form>
</body>
</html>
代码解释:

(图片来源网络,侵删)
window.onload: 确保整个页面加载完毕后再执行脚本,这样可以保证document.getElementById能找到对应的元素。new Date(): JavaScript中获取当前日期和时间的标准方法。.padStart(2, '0'): 一个非常实用的字符串方法,确保月份、日、时、分、秒都是两位数,7会变成07。document.getElementById("submit_time").value: 找到ID为submit_time的<input>元素,并将其value属性设置为格式化后的时间字符串。readonly: 这个属性让用户可以看到时间,但通常不允许他们修改,如果允许修改,可以去掉这个属性。
在后端PHP中处理并保存时间(数据库存储)
这是更核心、更常用的做法,即无论前端是否显示时间,在表单提交到服务器后,由PHP代码来获取并处理时间,然后存入数据库,这种方法更可靠,因为用户无法篡改。
DedeCMS的自定义表单功能(/plus/diy.php)为我们提供了钩子,可以在数据入库前进行处理。
假设你有一个自定义表单,数据库表名为 dede_diyform1,并且你希望将提交时间存入一个名为 submit_time 的字段(该字段类型为 DATETIME)。
步骤1:修改模板文件(增加隐藏字段)

(图片来源网络,侵删)
在你的自定义表单模板中,添加一个隐藏的输入字段,用来传递一个标记,告诉后端我们需要处理时间。
<form action="/plus/diy.php" method="post" enctype="multipart/form-data">
<!-- ... 其他表单字段 ... -->
<!-- 这是一个隐藏字段,用于触发PHP的时间处理逻辑 -->
<input type="hidden" name="diytime" value="1" />
<button type="submit">提交</button>
</form>
步骤2:修改 /plus/diy.php 文件
这是最关键的一步,我们需要编辑 diy.php 文件,找到处理数据入库的代码段,并添加我们的自定义逻辑。
- 找到文件位置:
/plus/diy.php - 搜索关键代码:在文件中找到类似
$diy->save($addarr);的代码,这行代码就是将数据存入数据库的地方。 - 在它之前添加我们的逻辑:
// 在 include(DEDEINC.'/dedetemplate.class.php'); 这行之后,$diy->save($addarr); 之前添加以下代码:
// 检查是否传来了我们自定义的 diytime 标记
if(isset($_POST['diytime']) && $_POST['diytime'] == '1') {
// 获取当前服务器时间,格式为 MySQL DATETIME 格式 (YYYY-MM-DD HH:MM:SS)
$addarr['submit_time'] = date('Y-m-d H:i:s');
// 如果你的字段名不是 submit_time,请替换成你自己的字段名
// $addarr['my_time_field'] = date('Y-m-d H:i:s');
}
// --- 原有的代码 ---
// $addarr 是一个数组,包含了所有表单提交过来的数据
// $diy->save($addarr); 这行会将 $addarr 数组中的数据插入到数据库
$diy->save($addarr);
代码解释:
if(isset($_POST['diytime']) && $_POST['diytime'] == '1'): 这是一个判断,只有当我们的表单中存在name="diytime"且其值为1时,下面的代码才会执行,这可以防止误操作。$addarr['submit_time']: 这里我们直接操作$addarr数组。$addarr是DedeCMS内部用来收集所有表单数据的数组,我们向这个数组中增加一个键值对,键submit_time必须和你数据库表中的字段名完全一致。date('Y-m-d H:i:s'): 这是PHP中获取当前时间的标准函数,'Y-m-d H:i:s'这个格式化字符串会生成DATETIME类型字段需要的标准格式。
步骤3:确保数据库字段存在
请务必确认你的自定义表单对应的数据库表中,有一个 submit_time 字段,并且其数据类型是 DATETIME,如果不是,你需要先修改数据库表结构。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
| 前端JS填充 | 用户体验好,无需刷新页面即可显示时间。 | 时间是客户端时间,可能被用户修改;依赖于JS,如果用户禁用JS则无效。 | 需要用户确认或修改时间的场景。 |
| 后端PHP处理 | 安全可靠,时间由服务器生成,用户无法篡改;不依赖客户端JS。 | 用户在前端看不到这个时间(除非你同时使用JS方法)。 | 绝大多数情况下的首选,特别是需要将时间作为准确记录存入数据库时。 |
最佳实践(推荐):
将两种方法结合起来,即:
- 前端用JS填充一个
readonly的文本框,让用户能看到一个默认的、不可修改的时间。 - 后端用PHP在数据入库前,重新生成一个服务器时间并覆盖掉前端传来的时间(或者直接忽略前端时间,只保存服务器时间)。
这样做既保证了用户体验,又保证了数据的准确性和安全性,后端PHP代码可以修改为直接覆盖,不依赖前端传来的值:
// 在 /plus/diy.php 中
// ... 代码 ...
// 强制设置提交时间为服务器当前时间,无论前端传了什么
$addarr['submit_time'] = date('Y-m-d H:i:s');
// ... 原有代码 ...
$diy->save($addarr);
这样,即使用户通过浏览器工具修改了前端显示的时间,最终存入数据库的依然是服务器接收到请求时的准确时间。
