> 技术文档 > PHP date() 函数

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/PM
    • a:小写 am/pm
  • 其他
    • T:时区(如 HKT)
    • U:Unix 时间戳(秒数)
基本示例
  1. 显示当前日期时间

    <?phpecho date(\"Y-m-d H:i:s\"); // 输出:2025-07-14 19:16:00?>
  2. 自定义格式

    <?phpecho date(\"l, F j, Y\"); // 输出:Monday, July 14, 2025?>
  3. 使用指定时间戳

    <?php$timestamp = mktime(0, 0, 0, 1, 1, 2020); // 2020-01-01 00:00:00echo date(\"Y-m-d\", $timestamp); // 输出:2020-01-01?>
结合表单处理

date() 函数常用于处理表单中的日期数据,例如记录提交时间或格式化用户输入的日期。

示例:记录表单提交时间
  1. 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\">  <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>
  2. PHP 处理脚本 (process.php):

    <?phpsession_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 \"提交成功!
    \"
    ; echo \"姓名: $name
    \"
    ; echo \"提交时间: $submit_time\"; $_SESSION[\'csrf_token\'] = bin2hex(random_bytes(32)); // 重置 CSRF 令牌 exit; } catch (PDOException $e) { $errors[] = \"数据库错误: \" . $e->getMessage(); } } }}// 显示错误并回显表单if (!empty($errors)) { echo \"
      \"; foreach ($errors as $error) { echo \"
    • $error
    • \"
      ; } echo \"
    \"
    ;}include \'form.html\';?>
  3. 数据库表结构 (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 令牌防止跨站请求伪造。
  • 用户体验:回显用户输入,显示具体错误提示。
常见问题与解决方案
  1. 时区问题
    如果时间不正确,检查服务器时区:

    date_default_timezone_set(\'Asia/Hong_Kong\');

    或在 php.ini 中设置:

    date.timezone = Asia/Hong_Kong
  2. 无效时间戳
    如果时间戳无效,date() 返回 false

    $result = date(\"Y-m-d\", -1);if ($result === false) { echo \"无效时间戳\";}
  3. 格式化复杂日期
    组合多种格式字符:

    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() 集成到表单处理中,适合日志记录、用户提交等实际场景。