0

0

如何解决PHP中Jalali日期处理的痛点,morilog/jalali助你轻松实现日期转换与操作

WBOY

WBOY

发布时间:2025-09-07 10:44:29

|

650人浏览过

|

来源于php中文网

原创

可以通过一下地址学习composer学习地址

告别日期转换的烦恼:PHP Jalali 日历处理的救星

在开发面向中东或中亚地区用户的php应用程序时,我们经常会遇到一个特殊的日期处理难题:如何优雅地支持jalali(也称为波斯历或沙姆西历)日历。php的内置

datetime
对象和相关函数对格里高利历(公历)的支持可谓驾轻就熟,但在处理jalali历时,它们却显得束手无策。

实际痛点:当格里高利遇上Jalali

想象一下这样的场景:你的应用需要记录用户的活动时间,并以Jalali格式展示给他们;或者你需要根据Jalali日期来筛选数据,甚至进行复杂的日期加减运算。如果只依靠PHP原生功能,你可能会面临以下困境:

  1. 手动转换的复杂性: 你可能需要自己编写复杂的算法来将格里高利日期转换为Jalali日期,反之亦然。这不仅耗时,而且极易出错,尤其是涉及到闰年、月份天数等细节时。
  2. 格式化难题: 即使转换成功,如何将Jalali日期按照特定格式(例如,波斯语月份名称)输出,又是一个新的挑战。
  3. 日期操作的缺失: 想要在Jalali日期上进行“加一个月”、“减三天”这样的操作?原生PHP函数无法直接支持,你需要先转换回格里高利历,操作后再转换回来,过程繁琐且容易引入逻辑错误。
  4. 代码可读性与维护性差: 大量的自定义日期处理逻辑会使代码变得臃肿、难以理解和维护。

这些问题不仅拖慢了开发进度,也增加了后期维护的成本,更可能因为日期显示错误而影响用户体验。

解决方案:
morilog/jalali
—— 你的Jalali日期瑞士军刀

正当我为这些日期问题焦头烂额时,我发现了

morilog/jalali
这个宝藏级的Composer包。它彻底改变了我处理Jalali日期的方式,让一切变得前所未有的简单和高效。

morilog/jalali
是一个专门为PHP应用程序设计的库,旨在帮助开发者轻松地处理Jalali日期。它基于Jalali
datetime
类,提供了高可读性的API,涵盖了Jalali日期的创建、操作、比较和与格里高利历的转换等所有常用功能。

立即学习PHP免费学习笔记(深入)”;

轻松安装,即刻上手

使用Composer安装

morilog/jalali
非常简单,只需一条命令:

composer require morilog/jalali:3.*

安装完成后,你就可以在项目中使用它了。

核心功能与使用示例

morilog/jalali
主要通过
Jalalian
类和
CalendarUtils
类来提供其功能。

1.

Jalalian
类:面向对象的日期操作

Jalalian
类是这个库的核心,它提供了一个类似于PHP原生
datetime
Carbon
库的面向对象接口,用于处理Jalali日期。

Elser AI Comics
Elser AI Comics

一个免费且强大的AI漫画生成工具,助力你三步创作自己的一出好戏

下载
  • 创建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(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
  • 日期校验:

    // 校验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
后,我真切感受到了以下几点显著优势:

  • 准确性高: 库内置了经过验证的日期转换算法,确保了Jalali和格里高利历之间转换的精确无误。
  • 开发效率提升: 提供了直观、丰富的API,避免了手动编写复杂日期逻辑,大大节省了开发时间。
  • 代码可读性强: 面向对象的设计使得日期操作代码清晰明了,易于理解和维护。
  • 用户体验优化: 能够以用户熟悉的Jalali日历格式展示信息,提升了应用的本地化水平和用户满意度。
  • 强大的互操作性:
    Carbon
    库的无缝集成,使得在混合日历环境中工作变得轻而易举。
  • 不可变性:
    Jalalian
    对象的操作会返回新的实例,保证了原对象的不可变性,减少了潜在的副作用。

通过

morilog/jalali
,我不仅彻底解决了Jalali日期处理的痛点,还让我的PHP应用在国际化和本地化方面迈上了一个新台阶。如果你也面临类似的挑战,强烈推荐你尝试一下这个强大的Composer包,它一定会让你的开发工作事半功倍!

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2481

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1580

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1477

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

951

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1414

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1234

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1445

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1305

2023.11.13

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
第二十四期_PHP8编程
第二十四期_PHP8编程

共86课时 | 3.4万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

第二十三期_PHP编程
第二十三期_PHP编程

共93课时 | 6.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号