fisharebest / ext-calendar
阿拉伯(希吉里)、法语、公历、犹太、儒略和波斯(贾拉利)日历的实现。同时提供PHP ext/calendar扩展的替代方案。
2.6.0
2022-05-31 16:01 UTC
README
PHP日历函数
此包提供了阿拉伯(希吉里)、法国共和、公历、儒略、犹太和波斯(贾拉利)日历的实现,以及PHP的ext/calendar扩展的替代方案。它允许您在不安装ext/calendar扩展的服务器(如HHVM)上使用以下PHP函数。
- cal_days_in_month()
- cal_from_jd()
- cal_info()
- cal_to_jd()
- easter_date()
- easter_days()
- FrenchToJD()
- GregorianToJD()
- JDDayOfWeek()
- JDMonthName()
- JDToFrench()
- JDToGregorian()
- jdtojewish()
- JDToJulian()
- jdtounix()
- JewishToJD()
- JulianToJD()
- unixtojd()
如何使用
将包添加到你的composer.json
文件中的依赖项
require { "fisharebest/ext-calendar": "~2.5" }
现在你可以使用PHP函数了,无论是否安装了ext/calendar
。从版本2.2开始,不再需要使用Shim::create()
初始化这些函数。
require 'vendor/autoload.php'; print_r(cal_info(CAL_GREGORIAN)); // Works in HHVM, or if ext-calendar is not installed
或者,直接使用日历类。
require 'vendor/autoload.php'; // Create calendars $calendar = new Fisharebest\ExtCalendar\ArabicCalendar; $calendar = new Fisharebest\ExtCalendar\FrenchCalendar; $calendar = new Fisharebest\ExtCalendar\GregorianCalendar; $calendar = new Fisharebest\ExtCalendar\JewishCalendar; $calendar = new Fisharebest\ExtCalendar\JulianCalendar; $calendar = new Fisharebest\ExtCalendar\PersianCalendar; // Date conversions $julian_day = $calendar->ymdToJd($year, $month, $day); list($year, $month, $day) = $calendar->jdToYmd($julian_day); // Information about days, weeks and months $is_leap_year = $calendar->isLeapYear($year); $days_in_month = $calendar->daysInMonth($year, $month); $months_in_year = $calendar->monthsInYear(); // Not all calendars have 12 $months_in_year = $calendar->monthsInYear($year); // In a specific year $days_in_week = $calendar->daysInWeek(); // Not all calendars have 7 // Which dates are valid for this calendar? $jd = $calendar->jdStart(); $jd = $calendar->jdEnd(); // Miscellaneous utilities $jewish = new JewishCalendar; $jewish->numberToHebrewNumerals(5781, false); // "תשפ״א" $jewish->numberToHebrewNumerals(5781, true); // "ה׳תשפ״א"
已知的限制和局限性
当遇到无效输入时,shim函数触发E_USER_WARNING
而不是E_WARNING
。错误消息的文本是相同的。
函数easterdate()
和jdtounixtime()
使用PHP的时间区域,而不是操作系统的时区。这些可能不同。
与不同版本的PHP的兼容性
以下PHP错误是根据使用的PHP版本模拟的。因此,该包始终提供与本地ext/calendar
扩展相同的行为。
-
#54254 犹太月“Adar” - 在PHP 5.5中修复。
-
#67960 常量
CAL_DOW_SHORT
和CAL_DOW_LONG
- 被该项目发现并修复 - 在PHP 5.5.21和5.6.5中修复。 -
#67976 法历在
cal_days_in_month()
中的值不正确 - 由该项目发现。
开发和贡献
由于上述已知的限制,您可能需要使用TZ=UTC phpunit
运行单元测试。
欢迎提交拉取请求。请确保在适用的情况下包含单元测试。
历史
这些函数最初是为webtrees项目编写的。作为重构过程的一部分,它们被提取到一个独立的库中,并赋予版本号、单元测试等。
未来计划
- 支持法语历的替代闰年方案(真春分、罗姆、128年周期)以及4年周期。
- 支持其他日历,例如埃塞俄比亚、印度教、中国等。