fisharebest/ext-calendar

阿拉伯(希吉里)、法语、公历、犹太、儒略和波斯(贾拉利)日历的实现。同时提供PHP ext/calendar扩展的替代方案。

2.6.0 2022-05-31 16:01 UTC

This package is auto-updated.

Last update: 2024-09-14 22:21:42 UTC


README

Build Status Coverage Status SensioLabsInsight Scrutinizer Code Quality StyleCI Code Climate

PHP日历函数

此包提供了阿拉伯(希吉里)法国共和公历儒略犹太波斯(贾拉利)日历的实现,以及PHP的ext/calendar扩展的替代方案。它允许您在不安装ext/calendar扩展的服务器(如HHVM)上使用以下PHP函数。

如何使用

将包添加到你的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_SHORTCAL_DOW_LONG - 被该项目发现并修复 - 在PHP 5.5.21和5.6.5中修复。

  • #67976 法历在cal_days_in_month()中的值不正确 - 由该项目发现。

开发和贡献

由于上述已知的限制,您可能需要使用TZ=UTC phpunit运行单元测试。

欢迎提交拉取请求。请确保在适用的情况下包含单元测试。

历史

这些函数最初是为webtrees项目编写的。作为重构过程的一部分,它们被提取到一个独立的库中,并赋予版本号、单元测试等。

未来计划

  • 支持法语历的替代闰年方案(真春分、罗姆、128年周期)以及4年周期。
  • 支持其他日历,例如埃塞俄比亚、印度教、中国等。