2026-02-06 05:09:37
PHP 中主要通过内置函数(如 time()、date()、strtotime())和 DateTime 类操作日期与时间,支持时间戳转换、格式化、时区管理及复杂计算,可高效完成注册时间记录、超时判断等任务。
一、基础日期时间操作获取当前时间戳
time() 返回当前 Unix 时间戳(自 1970-01-01 以来的秒数):echo time(); // 输出如 1712345678
格式化时间戳为可读字符串
date($format, $timestamp) 将时间戳转为指定格式的日期字符串,默认使用当前时间:echo date('Y-m-d H:i:s'); // 输出如 2025-04-05 10:30:25
常用格式字符:
Y:四位年份(2025)
m:两位月份(01-12)
d:两位日期(01-31)
H:24 小时制小时(00-23)
i:分钟(00-59)
s:秒(00-59)
strtotime() 将人类可读日期解析为 Unix 时间戳,支持相对时间表达:$timestamp = strtotime("2025-04-05 10:30:00");echo strtotime("+1 day"); // 当前时间加 1 天echo strtotime("next Monday"); // 下周一的时间戳
注意:处理用户输入时需验证日期有效性,避免返回 false 导致错误。
创建 DateTime 对象
支持当前时间、指定日期或相对时间:$date = new DateTime(); // 当前时间$date = new DateTime('2025-04-05'); // 指定日期$date = new DateTime('tomorrow'); // 相对时间
格式化输出
使用 format() 方法自定义格式:echo $date->format('Y-m-d H:i:s');
修改时间
modify() 直接修改日期字符串:$date->modify('+1 week'); // 加 1 周
add() 结合 DateInterval 精确调整:$date->add(new DateInterval('P1M')); // 加 1 个月
设置时区
创建对象时指定时区:$date = new DateTime('now', new DateTimeZone('Asia/Shanghai'));
或全局设置默认时区(推荐在项目初始化时统一配置):date_default_timezone_set('Asia/Shanghai');
查看所有支持的时区:print_r(DateTimeZone::listIdentifiers());
计算两个 DateTime 对象之间的差异,返回 DateInterval 对象:$start = new DateTime('2025-01-01');$end = new DateTime('2025-04-05');$interval = $start->diff($end);echo $interval->days; // 输出总天数
获取具体间隔部分:
$interval->y:年数
$interval->m:月数
$interval->d:天数
超时判断
比较当前时间戳与过期时间戳:$current = time();$expire = strtotime('2025-04-05 10:30:00');if ($current > $expire) { echo "已超时";}
倒计时功能
使用 diff() 计算剩余时间:$now = new DateTime();$target = new DateTime('2025-12-31');$interval = $now->diff($target);echo "剩余 {$interval->days} 天";
日志时间记录
格式化时间后写入数据库:$logTime = date('Y-m-d H:i:s');// 写入日志表
生日提醒
提取月日部分进行匹配:$birthday = '04-05';$today = date('m-d');if ($birthday === $today) { echo "今天是生日!";}
合理运用上述工具,可高效完成 PHP 中的日期时间操作需求。