Recurr は、繰り返しルール (RRULE) を操作し、それらを DateTime オブジェクトに変換するための PHP ライブラリです。
Recurr は、定期的なイベントを含むカレンダーの前身として開発され、rrule.js から多大な影響を受けています。
Recurr をインストールする推奨される方法は、Composer を使用することです。
composer require simshaun/recurr
新しい Rule オブジェクトを作成するには、(RRULE) 文字列またはルール部分、開始日、終了日 (オプション)、およびタイムゾーンを含む配列を渡します。
$ timezone = ' America/New_York ' ;
$ startDate = new DateTime ( ' 2013-06-12 20:00:00 ' , new DateTimeZone ( $ timezone ));
$ endDate = new DateTime ( ' 2013-06-14 20:00:00 ' , new DateTimeZone ( $ timezone )); // Optional
$ rule = new Recurr Rule ( ' FREQ=MONTHLY;COUNT=5 ' , $ startDate , $ endDate , $ timezone );
連鎖メソッドを使用してルールをプログラム的に構築し、結果の RRULE を取得することもできます。
$ rule = ( new Recurr Rule )
-> setStartDate ( $ startDate )
-> setTimezone ( $ timezone )
-> setFreq ( ' DAILY ' )
-> setByDay ([ ' MO ' , ' TU ' ])
-> setUntil ( new DateTime ( ' 2017-12-31 ' ))
;
echo $ rule -> getString (); //FREQ = DAILY ; UNTIL=20171231T000000 ; BYDAY=MO , TU
$ transformer = new Recurr Transformer ArrayTransformer ();
print_r ( $ transformer -> transform ( $ rule ));
$transformer->transform(...)
Recurrence
オブジェクトのRecurrenceCollection
を返します。Recurrence
には、 DateTime
オブジェクトを返すgetStart()
とgetEnd()
メソッドがあります。Rule
終了日がない場合、 getEnd()
getStart()
のオブジェクトと同じDateTime
オブジェクトを返します。注: トランスフォーマーには、生成するオブジェクトの数に「仮想」制限 (デフォルトは 732) があります。これにより、無限に繰り返されるルールでスクリプトがクラッシュするのを防ぎます。
ArrayTransformer
に渡すArrayTransformerConfig
オブジェクトを使用して、仮想制限を変更できます。
制約は、特定の日付をRecurrenceCollection
に追加することを許可または禁止するために ArrayTransformer によって使用されます。 Recurr には次の制約があります。
AfterConstraint(DateTime $after, $inc = false)
BeforeConstraint(DateTime $before, $inc = false)
BetweenConstraint(DateTime $after, DateTime $before, $inc = false)
$inc
$after
または$before
自体が繰り返しである場合に何が起こるかを定義します。 $inc = true
の場合、それらはコレクションに含まれます。例えば、
$ startDate = new DateTime ( ' 2014-06-17 04:00:00 ' );
$ rule = new Recurr Rule ( ' FREQ=MONTHLY;COUNT=5 ' , $ startDate );
$ transformer = new Recurr Transformer ArrayTransformer ();
$ constraint = new Recurr Transformer Constraint BeforeConstraint ( new DateTime ( ' 2014-08-01 00:00:00 ' ));
print_r ( $ transformer -> transform ( $ rule , $ constraint ));
注: 独自の制約を作成する場合は、制約の要件を満たさない日付はトランスフォーマーの仮想制限にカウントされないことを知っておくことが重要です。制約の
$stopsTransformer
プロパティを手動でfalse
に設定すると、無限ループによってトランスフォーマーがクラッシュする可能性があります。これを防ぐ方法の例については、BetweenConstraint
参照してください。
RecurrenceCollection
フィルターRecurrenceCollection
繰り返しをフィルタリングするための次の連鎖可能なヘルパー メソッドを提供します。
startsBetween(DateTime $after, DateTime $before, $inc = false)
startsBefore(DateTime $before, $inc = false)
startsAfter(DateTime $after, $inc = false)
endsBetween(DateTime $after, DateTime $before, $inc = false)
endsBefore(DateTime $before, $inc = false)
endsAfter(DateTime $after, $inc = false)
$inc
$after
または$before
自体が繰り返しである場合に何が起こるかを定義します。 $inc = true
の場合、それらはフィルターされたコレクションに含まれます。例えば、
pseudo...
2014-06-01 startsBetween(2014-06-01, 2014-06-20) // false
2014-06-01 startsBetween(2014-06-01, 2014-06-20, true) // true
注:
RecurrenceCollection
Doctrine プロジェクトの ArrayCollection クラスを拡張します。
Recurr は、一部の繰り返しルールを人間が読めるテキストに変換することをサポートしています。この機能はまだベータ版であり、年、月、週、日の頻度のみをサポートしています。
$ rule = new Rule ( ' FREQ=YEARLY;INTERVAL=2;COUNT=3; ' , new DateTime ());
$ textTransformer = new TextTransformer ();
echo $ textTransformer -> transform ( $ rule );
英語以外の言語が必要な場合は、サポートされているロケールのいずれかを使用して翻訳者を渡すことができます(翻訳フォルダーを参照) 。
$ rule = new Rule ( ' FREQ=YEARLY;INTERVAL=2;COUNT=3; ' , new DateTime ());
$ textTransformer = new TextTransformer (
new Recurr Transformer Translator ( ' de ' )
);
echo $ textTransformer -> transform ( $ rule );
この動作は構成可能です。
$ timezone = ' America/New_York ' ;
$ startDate = new DateTime ( ' 2013-01-31 20:00:00 ' , new DateTimeZone ( $ timezone ));
$ rule = new Recurr Rule ( ' FREQ=MONTHLY;COUNT=5 ' , $ startDate , null , $ timezone );
$ transformer = new Recurr Transformer ArrayTransformer ();
$ transformerConfig = new Recurr Transformer ArrayTransformerConfig ();
$ transformerConfig -> enableLastDayOfMonthFix ();
$ transformer -> setConfig ( $ transformerConfig );
print_r ( $ transformer -> transform ( $ rule ));
// 2013-01-31 , 2013-02-28 , 2013-03-31 , 2013-04-30 , 2013-05-31
気軽にコメントしたりプルリクエストをしたりしてください。 PR を含むテストを含めてください。
Recurr は MIT ライセンスに基づいてライセンスされています。詳細については、LICENSE ファイルを参照してください。