rlanvin/php-rrule

PHP 的轻量级快速循环规则 (RFC 5545)

v2.5.1 2024-06-23 07:45 UTC

README

PHP 的轻量级快速循环规则实现 (RRULE 来自 RFC 5545),用于轻松计算重复/循环的日期和事件(例如在日历中)。这个库最初是 python-dateutil 的移植。

Build status Latest Stable Version Total Downloads

基本示例

use RRule\RRule;

$rrule = new RRule([
	'FREQ' => 'MONTHLY',
	'INTERVAL' => 1,
	'DTSTART' => '2015-06-01',
	'COUNT' => 6
]);

foreach ($rrule as $occurrence) {
	echo $occurrence->format('D d M Y'),", ";
}
// Mon 01 Jun 2015, Wed 01 Jul 2015, Sat 01 Aug 2015, Tue 01 Sep 2015, Thu 01 Oct 2015, Sun 01 Nov 2015

echo $rrule->humanReadable(),"\n";
// monthly on the 1st of the month, starting from 01/06/2015, 6 times

完整文档和更多示例可在 维基 中找到。

要求

  • PHP >= 5.6
  • intl 扩展推荐用于 humanReadable(),但不是强制要求

安装

建议的方法是通过 Composer 安装库 通过 Composer

只需运行 composer require rlanvin/php-rrule,它将被自动安装并包含在您的 composer.json 中。

现在您可以使用自动加载器,您将能够访问这个库

require 'vendor/autoload.php';

文档

完整文档可在 维基 中找到。

您还可以在 RFC 5545 第 3.3.10 节 中找到有用的信息。

贡献

请随意贡献!只需创建一个新的问题或一个新的 pull request。

编码风格是(主要是)PSR-2,但使用制表符。

翻译

使用 ./bin/review_translations.php --locale <locale> 打印使用指定区域设置(默认为英语)的示例列表。使用 ./bin/review_translations.php --rule "<rule>" 测试所有可用区域设置中的特定规则。

注意

我开始这个库是因为我对 PHP 中现有的实现不满意,所以我认为将 python-dateutil 的 rrule 实现移植到 PHP 将是一个很好的学习项目。

Python 库有点难以理解,因为算法没有注释,变量非常不透明(我指的是 lno1wkst)。我尽量在 PHP 移植中注释和解释尽可能多的算法,所以如果您感兴趣,请随意查看代码。

该库在各个方面都与 Python 版本有所不同,特别是在对 RFC 的尊重方面。这个版本更加严格,不会接受许多 Python 版本接受的规则部分的非合规组合。该版本还有一些额外的功能。

许可证

本库采用 MIT 许可证发布。