PHP 日期处理:热门库全面概述

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

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

开始课程

PHP 日期处理:库与工具



日期和时间处理是 Web 开发中最常见的任务之一。PHP 内置了 DateTime 类,但其功能通常不足以应对复杂操作:计算时间差、根据区域设置格式化、处理时区等。这时就需要专门的库来帮忙。本文将介绍 PHP 中用于日期处理的最佳工具。



1. 内置 DateTime 类

在转向第三方库之前,有必要回顾一下原生解决方案——DateTime 类。它自 PHP 5.2 版本起可用,并提供了基本功能:

  • 创建日期和时间对象
  • 格式化(通过 format())
  • 修改日期(通过 modify())
  • 处理时区(DateTimeZone)
  • 日期比较

使用示例:

<?php$date = new DateTime('2024-12-31');$date->modify('+1 day');echo $date->format('Y-m-d'); // 2025-01-01?>

然而,DateTime 存在一些缺点:缺乏处理时间间隔的便捷方法、方法链调用复杂、对人性化格式的支持有限。



2. Carbon —— 最流行的库

Carbon 是 DateTime 的扩展,它添加了便捷的 API、方法链和大量辅助函数。通过 Composer 安装:

composer require nesbot/carbon

Carbon 的关键特性:

  • 人性化方法:now()、yesterday()、tomorrow()
  • 本地化(支持俄语)
  • 处理时间间隔:diffForHumans()
  • 通过方法链修改日期:->addDays(5)->subMonths(2)
  • 比较:isWeekend()、isPast()、isFuture()

俄语本地化示例:

<?phprequire 'vendor/autoload.php';use Carbon\\Carbon;

Carbon::setLocale('ru');$date = Carbon::now();echo $date->diffForHumans(); // "только что" 或 "3 часа назад"?>

Carbon 是 Laravel 及许多其他项目中处理日期的事实标准。



3. Chronos —— 轻量级替代方案

CakePHP 的 Chronos 是另一个 DateTime 扩展,但侧重于轻量和性能。安装:

composer require cakephp/chronos

与 Carbon 的区别:

  • 无依赖(仅需 PHP)
  • 更严格的类型检查
  • 默认支持不可变(immutable)对象
  • 方法较少,但核心功能齐全

示例:

<?phpuse Cake\\Chronos\\Chronos;

$date = Chronos::now();$future = $date->addDays(10);echo $future->format('d.m.Y');?>

Chronos 适合那些注重代码简洁性和性能,但不需要庞大生态系统的项目。



4. CarbonImmutable 和 DateTimeImmutable

从 PHP 5.5 开始,引入了 DateTimeImmutable 类,它不会修改原始对象,而是返回一个新对象。Carbon 也有对应的 CarbonImmutable。这可以防止意外的数据修改:

<?phpuse Carbon\\CarbonImmutable;

$date = CarbonImmutable::now();$newDate = $date->addDay();echo $date->format('Y-m-d'); // 原始对象未改变?>

如果日期在函数之间传递或存储在缓存中,请使用不可变版本。



5. League\\Period —— 处理时间段

来自 The League of Extraordinary Packages 的 Period 库专为处理时间间隔和周期而设计。

推荐