在开发面向中东或中亚地区用户的php应用程序时,我们经常会遇到一个特殊的日期处理难题:如何优雅地支持jalali(也称为波斯历或沙姆西历)日历。php的内置
datetime
想象一下这样的场景:你的应用需要记录用户的活动时间,并以Jalali格式展示给他们;或者你需要根据Jalali日期来筛选数据,甚至进行复杂的日期加减运算。如果只依靠PHP原生功能,你可能会面临以下困境:
这些问题不仅拖慢了开发进度,也增加了后期维护的成本,更可能因为日期显示错误而影响用户体验。
morilog/jalali
正当我为这些日期问题焦头烂额时,我发现了
morilog/jalali
morilog/jalali
datetime
立即学习“PHP免费学习笔记(深入)”;
使用Composer安装
morilog/jalali
<pre class="brush:php;toolbar:false;">composer require morilog/jalali:3.*
安装完成后,你就可以在项目中使用它了。
morilog/jalali
Jalalian
CalendarUtils
1. Jalalian
Jalalian
datetime
Carbon
创建Jalali日期: 你可以轻松地创建当前Jalali日期,或者从时间戳、字符串、甚至
Carbon
<pre class="brush:php;toolbar:false;">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()
<pre class="brush:php;toolbar:false;">$date = Jalalian::now();
echo $date->format('%A, %d %B %Y'); // 例如:جمعه، 25 آذر 1402
echo $date->ago(); // 例如:چند لحظه پیش (几秒前)日期加减运算:
add*()
sub*()
<pre class="brush:php;toolbar:false;">$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
datetime
<pre class="brush:php;toolbar:false;">$jalaliDate = Jalalian::now(); $carbonDate = $jalaliDate->toCarbon(); echo $carbonDate->toDateTimeString(); // 输出对应的格里高利日期
2. CalendarUtils
CalendarUtils
Jalali与格里高利互转:
<pre class="brush:php;toolbar:false;">use Morilog\Jalali\CalendarUtils;
// 格里高利转Jalali
$jalaliArray = CalendarUtils::toJalali(2023, 12, 16); // [1402, 9, 25]
echo implode('-', $jalaliArray); // 1402-9-25
// Jalali转格里高利
$gregorianArray = CalendarUtils::toGregorian(1402, 9, 25); // [2023, 12, 16]
echo implode('-', $gregorianArray); // 2023-12-16日期校验:
<pre class="brush:php;toolbar:false;">// 校验Jalali日期 $isValidJalali = CalendarUtils::checkDate(1391, 2, 30, true); // true $isValidGregorian = CalendarUtils::checkDate(2016, 5, 7, false); // true
数字转换: 在某些情况下,你可能需要将拉丁数字(0-9)转换为波斯数字(۰-۹),反之亦然。
<pre class="brush:php;toolbar:false;">$persianNumbers = CalendarUtils::convertNumbers('1395-02-19'); // ۱۳۹۵-۰۲-۱۹
$latinNumbers = CalendarUtils::convertNumbers('۱۳۹۵-۰۲-۱۹', true); // 1395-02-19使用
morilog/jalali
Carbon
Jalalian
通过
morilog/jalali
以上就是如何解决PHP中Jalali日期处理的痛点,morilog/jalali助你轻松实现日期转换与操作的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号