PHP 日期和时间处理:从入门到精通
日期和时间处理是 Web 开发中最常见的任务之一。无论是显示发布日期、计算用户年龄、记录事件日志还是创建日历,PHP 都提供了强大而灵活的工具。在本文中,我们将剖析所有方面:从简单的函数到使用 DateTime 类的面向对象方法,包括时区和实际示例。
基本函数:date() 和 time()
用于处理日期的基础函数集包括 time() 和 date()。函数 time() 返回当前的 Unix 时间戳(自 1970 年 1 月 1 日以来的秒数)。函数 date() 将此时间戳格式化为人类可读的形式。
获取当前日期和时间
显示当前日期的最简单方法:
<?phpecho date('Y-m-d H:i:s'); // 2025-04-10 15:30:45?>使用 date() 进行格式化
函数 date() 接受两个参数:格式和可选的时间戳。最常用的格式化字符:
d— 月份中的第几天(01–31)m— 月份(01–12)Y— 4 位数字表示的年份H— 24 小时制的小时(00–23)i— 分钟(00–59)s— 秒(00–59)
包含中文文本的输出示例:
<?phpecho '今天是 ' . date('Y年m月d日') . ',时间 ' . date('H:i');// 今天是 2025年04月10日,时间 15:30?>DateTime 类:面向对象的方法
对于复杂操作,建议使用 DateTime 类。它直观易懂,支持时区,并简化了日期操作。
创建 DateTime 对象
可以通过多种方式创建对象:
<?php// 当前日期和时间$now = new DateTime();echo $now->format('Y-m-d H:i:s'); // 2025-04-10 15:30:45
// 特定日期$date = new DateTime('2025-12-31 23:59:59');echo $date->format('d.m.Y'); // 31.12.2025
// 使用相对格式$nextWeek = new DateTime('+1 week');echo $nextWeek->format('Y-m-d');?>修改日期:modify()
方法 modify() 允许轻松添加或减去时间间隔:
<?php$date = new DateTime('2025-04-10');$date->modify('+10 days');echo $date->format('d.m.Y'); // 20.04.2025
$date->modify('-1 month');echo $date->format('d.m.Y'); // 20.03.2025?>处理时区
忽略时区是一个常见错误。PHP 提供了两种管理时区的方法:全局通过 date_default_timezone_set(),以及局部通过 DateTimeZone 对象。
全局设置
在脚本开头设置时区:
<?phpdate_default_timezone_set('Europe/Moscow');echo date('H:i'); // 莫斯科时间?>DateTime 的局部设置
每个 DateTime 对象可以有自己的时区:
<?php$timezone = new DateTimeZone('Asia/Vladivostok');$date = new DateTime('now', $timezone);echo $date->format('H:i'); // 符拉迪沃斯托克时间
// 更改现有对象的时区$date->setTimezone(new DateTimeZone('Europe/Moscow'));echo $date->format('H:i'); // 转换后的时间?>日期之间的差异:DateInterval
类 DateInterval 和方法 diff() 允许计算两个日期之间的差异。
计算差异
<?php$start = new DateTime('2025-01-01');$end = new DateTime('2025-12-31');$interval = $start->diff($end);
echo $interval->days; // 364(天数