PHP date() 函数
PHP date() 函数中文讲解
什么是 PHP date() 函数?
date()
函数是 PHP 内置函数,用于格式化时间戳或当前日期时间,返回指定格式的字符串。它是处理日期和时间的常用工具,广泛应用于显示日期、记录日志、生成时间戳等场景。
基本语法
string date(string $format [, int $timestamp = time()])
- $format:必需,指定输出日期的格式,使用特定的格式字符。
- $timestamp:可选,Unix 时间戳(秒数),默认使用当前时间(
time()
)。 - 返回值:格式化后的日期字符串。
常见格式字符
date()
函数使用格式字符定义输出样式,以下是常用的格式字符:
- 年份:
Y
:四位年份(如 2025)y
:两位年份(如 25)- 月份:
m
:两位数字月份(01-12)F
:完整月份名(如 July)M
:短月份名(如 Jul)- 日期:
d
:两位数字日期(01-31)j
:不补零的日期(1-31)- 星期:
l
:完整星期名(如 Monday)D
:短星期名(如 Mon)- 时间:
H
:24 小时制(00-23)h
:12 小时制(01-12)i
:分钟(00-59)s
:秒(00-59)A
:大写 AM/PMa
:小写 am/pm- 其他:
T
:时区(如 HKT)U
:Unix 时间戳(秒数)
基本示例
- 显示当前日期时间
<?php
echo date("Y-m-d H:i:s"); // 输出:2025-07-14 19:16:00
?>
- 自定义格式
<?php
echo date("l, F j, Y"); // 输出:Monday, July 14, 2025
?>
- 使用指定时间戳
<?php
$timestamp = mktime(0, 0, 0, 1, 1, 2020); // 2020-01-01 00:00:00
echo date("Y-m-d", $timestamp); // 输出:2020-01-01
?>
结合表单处理
date()
函数常用于处理表单中的日期数据,例如记录提交时间或格式化用户输入的日期。
示例:记录表单提交时间
- HTML 表单 (
form.html
):
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>提交记录</title>
<style>
.error { color: red; }
label { display: inline-block; width: 100px; }
input { margin-bottom: 10px; }
</style>
</head>
<body>
<h2>提交记录</h2>
<form action="process.php" method="post">
<?php
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
?>
<input type="hidden" name="csrf_token" value="<?php echo htmlspecialchars($_SESSION['csrf_token']); ?>">
<label for="name">姓名*:</label>
<input type="text" id="name" name="name" value="<?php echo isset($_POST['name']) ? htmlspecialchars($_POST['name']) : ''; ?>">
<br>
<input type="submit" value="提交">
<p>* 表示必需字段</p>
</form>
</body>
</html>
- PHP 处理脚本 (
process.php
):
<?php
session_start();
// 初始化错误数组
$errors = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 验证 CSRF 令牌
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
$errors[] = "CSRF 验证失败";
} else {
// 获取并清理输入
$name = trim($_POST['name'] ?? '');
$name = filter_var($name, FILTER_SANITIZE_STRING);
$name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
// 验证必需字段
if (empty($name)) {
$errors[] = "姓名是必需字段";
}
// 如果没有错误,记录提交时间并保存
if (empty($errors)) {
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", "user", "pass");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 使用 date() 获取当前时间
$submit_time = date("Y-m-d H:i:s");
// 插入数据
$stmt = $pdo->prepare("INSERT INTO submissions (name, submit_time) VALUES (:name, :submit_time)");
$stmt->execute([
'name' => $name,
'submit_time' => $submit_time
]);
echo "提交成功!<br>";
echo "姓名: $name<br>";
echo "提交时间: $submit_time";
$_SESSION['csrf_token'] = bin2hex(random_bytes(32)); // 重置 CSRF 令牌
exit;
} catch (PDOException $e) {
$errors[] = "数据库错误: " . $e->getMessage();
}
}
}
}
// 显示错误并回显表单
if (!empty($errors)) {
echo "<div class='error'><ul>";
foreach ($errors as $error) {
echo "<li>$error</li>";
}
echo "</ul></div>";
}
include 'form.html';
?>
- 数据库表结构 (
submissions
表):
CREATE TABLE submissions (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
submit_time DATETIME NOT NULL
);
关键点解析
- 格式化输出:
date("Y-m-d H:i:s")
生成本地时间格式,适合数据库存储。 - 时区设置:确保正确时区,使用
date_default_timezone_set()
:
date_default_timezone_set('Asia/Hong_Kong'); // 设置为 HKT 时区
echo date("Y-m-d H:i:s T"); // 输出:2025-07-14 19:16:00 HKT
- 安全性:
- 使用
htmlspecialchars()
防止 XSS。 - 使用 PDO 预处理语句防止 SQL 注入。
- 添加 CSRF 令牌防止跨站请求伪造。
- 用户体验:回显用户输入,显示具体错误提示。
常见问题与解决方案
- 时区问题:
如果时间不正确,检查服务器时区:
date_default_timezone_set('Asia/Hong_Kong');
或在 php.ini
中设置:
date.timezone = Asia/Hong_Kong
- 无效时间戳:
如果时间戳无效,date()
返回false
:
$result = date("Y-m-d", -1);
if ($result === false) {
echo "无效时间戳";
}
- 格式化复杂日期:
组合多种格式字符:
echo date("l, F j, Y g:i A"); // 输出:Monday, July 14, 2025 7:16 PM
最佳实践
- 设置时区:始终在脚本开头设置时区,避免默认 UTC 或服务器时区问题。
- 验证输入:结合
$_POST
或$_GET
时,验证用户输入的日期格式:
$user_date = $_POST['date'] ?? '';
if (!strtotime($user_date)) {
$errors[] = "无效的日期格式";
}
- 使用 DateTime 类:对于复杂日期操作,考虑使用
DateTime
类:
$date = new DateTime();
echo $date->format("Y-m-d H:i:s");
- 错误处理:检查
date()
返回值,确保格式化成功。 - 安全输出:对动态输出的日期字符串使用
htmlspecialchars()
。
参考资源
- PHP 官方手册 – date():详细格式说明。
- 菜鸟教程 – PHP 日期:初学者友好教程。
- PHP DateTime 类:高级日期处理。
总结
PHP 的 date()
函数是格式化日期和时间的简单工具,通过丰富的格式字符支持灵活输出。结合表单处理和数据库操作,date()
可用于记录时间戳、显示用户友好的日期等场景。注意时区设置、输入验证和安全措施(如 XSS 和 CSRF 防护),可确保应用健壮性。上述示例展示了如何将 date()
集成到表单处理中,适合日志记录、用户提交等实际场景。