可以通过一下地址学习composer:学习地址
在开发面向中东或中亚地区用户的php应用程序时,我们经常会遇到一个特殊的日期处理难题:如何优雅地支持jalali(也称为波斯历或沙姆西历)日历。php的内置
datetime对象和相关函数对格里高利历(公历)的支持可谓驾轻就熟,但在处理jalali历时,它们却显得束手无策。
想象一下这样的场景:你的应用需要记录用户的活动时间,并以Jalali格式展示给他们;或者你需要根据Jalali日期来筛选数据,甚至进行复杂的日期加减运算。如果只依靠PHP原生功能,你可能会面临以下困境:
这些问题不仅拖慢了开发进度,也增加了后期维护的成本,更可能因为日期显示错误而影响用户体验。
morilog/jalali—— 你的Jalali日期瑞士军刀
正当我为这些日期问题焦头烂额时,我发现了
morilog/jalali这个宝藏级的Composer包。它彻底改变了我处理Jalali日期的方式,让一切变得前所未有的简单和高效。
morilog/jalali是一个专门为PHP应用程序设计的库,旨在帮助开发者轻松地处理Jalali日期。它基于Jalali
datetime类,提供了高可读性的API,涵盖了Jalali日期的创建、操作、比较和与格里高利历的转换等所有常用功能。
使用Composer安装
morilog/jalali非常简单,只需一条命令:
composer require morilog/jalali:3.*
安装完成后,你就可以在项目中使用它了。
morilog/jalali主要通过
Jalalian类和
CalendarUtils类来提供其功能。
1. Jalalian
类
:面向对象的日期操作
Jalalian类是这个库的核心,它提供了一个类似于PHP原生
datetime或
Carbon库的面向对象接口,用于处理Jalali日期。
创建Jalali日期: 你可以轻松地创建当前Jalali日期,或者从时间戳、字符串、甚至
Carbon对象创建。
use Morilog\Jalali\Jalalian;
// 获取当前Jalali日期
$now = Jalalian::now();
echo $now->format('Y/m/d H:i:s'); // 例如:1402/09/25 10:30:00
// 从时间戳创建
$dateFromTimestamp = Jalalian::forge(time());
echo $dateFromTimestamp->format('Y-m-d');
// 从字符串创建 (支持多种格式)
$specificDate = Jalalian::fromFormat('Y-m-d H:i:s', '1397-01-18 12:00:40');
echo $specificDate->format('%A, %d %B %y'); // 例如:پنجشنبه، 18 فروردین 97
// 从 Carbon 对象创建
use Carbon\Carbon;
$carbonDate = Carbon::now();
$jalaliFromCarbon = Jalalian::fromCarbon($carbonDate);
echo $jalaliFromCarbon->format('Y/m/d');格式化Jalali日期:
format()方法支持
strftime()风格的格式化字符串,让你能灵活地控制输出格式。
ago()方法则能输出人性化的相对时间。
$date = Jalalian::now();
echo $date->format('%A, %d %B %Y'); // 例如:جمعه، 25 آذر 1402
echo $date->ago(); // 例如:چند لحظه پیش (几秒前)日期加减运算:
add*()和
sub*()方法让日期计算变得直观。
$today = Jalalian::now();
$nextMonth = $today->addMonths(1);
echo $nextMonth->format('Y/m/d');
$lastWeek = $today->subDays(7);
echo $lastWeek->format('Y/m/d');与格里高利历的转换:
toCarbon()方法可以将
Jalalian对象转换为
Carbon对象,方便与PHP原生
datetime生态系统集成。
$jalaliDate = Jalalian::now(); $carbonDate = $jalaliDate->toCarbon(); echo $carbonDate->toDateTimeString(); // 输出对应的格里高利日期
2. CalendarUtils
类:实用工具函数
CalendarUtils提供了一系列静态方法,用于日期转换、校验和一些高级操作。
Jalali与格里高利互转:
use Morilog\Jalali\CalendarUtils;
// 格里高利转Jalali
$jalaliArray = CalendarUtils::toJalali(2025, 12, 16); // [1402, 9, 25]
echo implode('-', $jalaliArray); // 1402-9-25
// Jalali转格里高利
$gregorianArray = CalendarUtils::toGregorian(1402, 9, 25); // [2025, 12, 16]
echo implode('-', $gregorianArray); // 2025-12-16日期校验:
// 校验Jalali日期 $isValidJalali = CalendarUtils::checkDate(1391, 2, 30, true); // true $isValidGregorian = CalendarUtils::checkDate(2016, 5, 7, false); // true
数字转换: 在某些情况下,你可能需要将拉丁数字(0-9)转换为波斯数字(۰-۹),反之亦然。
$persianNumbers = CalendarUtils::convertNumbers('1395-02-19'); // ۱۳۹۵-۰۲-۱۹
$latinNumbers = CalendarUtils::convertNumbers('۱۳۹۵-۰۲-۱۹', true); // 1395-02-19使用
morilog/jalali后,我真切感受到了以下几点显著优势:
Carbon库的无缝集成,使得在混合日历环境中工作变得轻而易举。
Jalalian对象的操作会返回新的实例,保证了原对象的不可变性,减少了潜在的副作用。
通过
morilog/jalali,我不仅彻底解决了Jalali日期处理的痛点,还让我的PHP应用在国际化和本地化方面迈上了一个新台阶。如果你也面临类似的挑战,强烈推荐你尝试一下这个强大的Composer包,它一定会让你的开发工作事半功倍!