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日期。

MagickPen
MagickPen

在线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包,它一定会让你的开发工作事半功倍!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

154

2023.12.25

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

56

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

52

2025.11.27

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

782

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

434

2024.06.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

298

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

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

精品课程

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

共86课时 | 3.4万人学习

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

共28课时 | 2.5万人学习

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

共93课时 | 6.9万人学习

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

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