PHP中的日期与时间处理:函数、类与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

PHP中的日期和时间处理:从基础到进阶技巧



日期和时间处理是Web开发中最常见的任务之一。无论是显示当前日期、计算事件之间的差异,还是将时间戳保存到数据库中,PHP都提供了强大而灵活的工具集。本文将详细讲解PHP中日期和时间处理的基本函数、类以及最佳实践。



本文内容既适合刚开始学习PHP的新手,也适合希望系统化知识的有经验的开发者。



1. 基本函数:date()、time()和mktime()



我们从基础开始。PHP提供了几个用于处理日期的内置函数。其中最常用的是date()、time()和mktime()。



time()函数

time()函数返回当前的Unix时间戳(timestamp)——即自1970年1月1日00:00:00 UTC以来经过的秒数。这是许多操作所依赖的基本值。



echo time(); // 输出类似 1698765432


date()函数

date()函数用于格式化本地日期和时间。第一个参数是格式字符串,第二个参数(可选)是timestamp。如果未指定第二个参数,则使用当前时间。



// 基本格式echo date("Y-m-d");          // 2023-10-31echo date("H:i:s");          // 14:30:00echo date("d.m.Y H:i");      // 31.10.2023 14:30echo date("l, j F Y");       // Tuesday, 31 October 2023

// 自定义timestamp$timestamp = mktime(12, 0, 0, 1, 1, 2024);echo date("Y-m-d H:i:s", $timestamp); // 2024-01-01 12:00:00


常用格式化字符:

  • d — 月份中的第几天(01-31)
  • m — 月份(01-12)
  • Y — 4位数字表示的年份
  • H — 小时(00-23)
  • i — 分钟(00-59)
  • s — 秒数(00-59)


mktime()函数

mktime()根据传入的参数(小时、分钟、秒、月、日、年)创建timestamp。这对于获取特定日期的标记非常方便。



// 为2023年12月25日10:30:00创建timestamp$christmas = mktime(10, 30, 0, 12, 25, 2023);echo date("d.m.Y H:i:s", $christmas); // 25.12.2023 10:30:00


2. 面向对象方法:DateTime类



虽然date()和time()函数很简单,但它们有局限性。对于更复杂的操作(比较日期、处理时区、加减时间间隔),最好使用DateTime类。



创建DateTime对象

// 当前时间$now = new DateTime();echo $now->format("Y-m-d H:i:s"); // 2023-10-31 14:30:00

// 特定日期$date = new DateTime("2024-03-15 08:00:00");echo $date->format("d.m.Y"); // 15.03.2024

// 相对格式$nextWeek = new DateTime("+1 week");echo $nextWeek->format("Y-m-d");

$lastMonth = new DateTime("first day of last month");echo $lastMonth->format("Y-m-d");


处理时区

DateTime的主要优势之一是对时区的支持。



// 创建时指定时区$moscow = new DateTime("now", new DateTimeZone("Europe/Moscow"));echo $moscow->format("Y-m-d H:i:s"); // 莫斯科时间

// 更改时区$newYork = new DateTime("now", new DateTimeZone("America/New_York"));echo $newYork->format("Y-m-d H:i:s"); // 纽约时间

// 可用时区列表:https://www.php.net/manual/ru/timezones.php


比较日期

$date1 = new DateTime("2024-01-01");$date2 = new DateTime("2024-12-31");

if ($date1 < $date2) { echo "第一个日期早于第二个日期";}

// 差

博客

书籍推荐