Recurr ist eine PHP-Bibliothek zum Arbeiten mit Wiederholungsregeln (RRULE) und deren Konvertierung in DateTime-Objekte.
Recurr wurde als Vorläufer für einen Kalender mit wiederkehrenden Ereignissen entwickelt und ist stark von rrule.js inspiriert.
Die empfohlene Methode zur Installation von Recurr ist Composer.
composer require simshaun/recurr
Sie können ein neues Regelobjekt erstellen, indem Sie die Zeichenfolge (RRULE) oder ein Array mit den Regelteilen, dem Startdatum, dem Enddatum (optional) und der Zeitzone übergeben.
$ 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 );
Sie können auch verkettete Methoden verwenden, um Ihre Regel programmgesteuert zu erstellen und die resultierende RRULE zu erhalten.
$ 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(...)
gibt eine RecurrenceCollection
von Recurrence
Objekten zurück.Recurrence
verfügt über die Methoden getStart()
und getEnd()
die ein DateTime
Objekt zurückgeben.Rule
ein Enddatum fehlt, gibt getEnd()
ein DateTime
Objekt zurück, das dem von getStart()
entspricht.Hinweis: Der Transformator hat eine „virtuelle“ Begrenzung (Standard 732) für die Anzahl der von ihm generierten Objekte. Dadurch wird verhindert, dass das Skript bei einer unendlich wiederkehrenden Regel abstürzt. Sie können den virtuellen Grenzwert mit einem
ArrayTransformerConfig
-Objekt ändern, das Sie anArrayTransformer
übergeben.
Einschränkungen werden vom ArrayTransformer verwendet, um das Hinzufügen bestimmter Daten zu einer RecurrenceCollection
zuzulassen oder zu verhindern. Recurr bietet die folgenden Einschränkungen:
AfterConstraint(DateTime $after, $inc = false)
BeforeConstraint(DateTime $before, $inc = false)
BetweenConstraint(DateTime $after, DateTime $before, $inc = false)
$inc
definiert, was passiert, wenn $after
oder $before
selbst Wiederholungen sind. Wenn $inc = true
, werden sie in die Sammlung aufgenommen. Zum Beispiel,
$ 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 ));
Hinweis: Wenn Sie Ihre eigene Einschränkung erstellen, ist es wichtig zu wissen, dass Daten, die die Anforderungen der Einschränkung nicht erfüllen, nicht auf das virtuelle Limit des Transformators angerechnet werden. Wenn Sie die Eigenschaft
$stopsTransformer
Ihrer Einschränkung manuell auffalse
setzen, stürzt der Transformer möglicherweise über eine Endlosschleife ab. Ein Beispiel, wie Sie dies verhindern können, finden Sie imBetweenConstraint
.
RecurrenceCollection
-Filter nach der Transformation RecurrenceCollection
stellt die folgenden verkettbaren Hilfsmethoden zum Herausfiltern von Wiederholungen bereit:
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
definiert, was passiert, wenn $after
oder $before
selbst Wiederholungen sind. Wenn $inc = true
, werden sie in die gefilterte Sammlung aufgenommen. Zum Beispiel,
pseudo...
2014-06-01 startsBetween(2014-06-01, 2014-06-20) // false
2014-06-01 startsBetween(2014-06-01, 2014-06-20, true) // true
Hinweis:
RecurrenceCollection
erweitert die ArrayCollection-Klasse des Doctrine-Projekts.
Recurr unterstützt die Umwandlung einiger Wiederholungsregeln in für Menschen lesbaren Text. Diese Funktion befindet sich noch in der Betaphase und unterstützt nur jährliche, monatliche, wöchentliche und tägliche Frequenzen.
$ rule = new Rule ( ' FREQ=YEARLY;INTERVAL=2;COUNT=3; ' , new DateTime ());
$ textTransformer = new TextTransformer ();
echo $ textTransformer -> transform ( $ rule );
Wenn Sie mehr als Englisch benötigen, können Sie einen Übersetzer mit einem der unterstützten Gebietsschemas übergeben (siehe Ordner „Übersetzungen“) .
$ rule = new Rule ( ' FREQ=YEARLY;INTERVAL=2;COUNT=3; ' , new DateTime ());
$ textTransformer = new TextTransformer (
new Recurr Transformer Translator ( ' de ' )
);
echo $ textTransformer -> transform ( $ rule );
Dieses Verhalten ist konfigurierbar:
$ 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
Fühlen Sie sich frei, einen Kommentar abzugeben oder Pull-Anfragen zu stellen. Bitte schließen Sie Tests mit PRs ein.
Recurr ist unter der MIT-Lizenz lizenziert. Einzelheiten finden Sie in der LICENSE-Datei.