Recurr هي مكتبة PHP للعمل مع قواعد التكرار (RRULE) وتحويلها إلى كائنات DateTime.
تم تطوير Recurr كمقدمة لتقويم يحتوي على أحداث متكررة، وهو مستوحى بشكل كبير من rrule.js.
الطريقة الموصى بها لتثبيت Recurr هي من خلال Composer.
composer require simshaun/recurr
يمكنك إنشاء كائن قاعدة جديد عن طريق تمرير سلسلة (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(...)
يُرجع RecurrenceCollection
لكائنات Recurrence
.Recurrence
على أساليب getStart()
و getEnd()
التي تُرجع كائن DateTime
.Rule
المحولة تفتقر إلى تاريخ انتهاء، فسيُرجع getEnd()
كائن DateTime
مساوٍ لكائن getStart()
.ملحوظة: المحول لديه حد "افتراضي" (الافتراضي 732) لعدد الكائنات التي يقوم بإنشائها. وهذا يمنع البرنامج النصي من التعطل عند قاعدة متكررة بلا حدود. يمكنك تغيير الحد الظاهري باستخدام كائن
ArrayTransformerConfig
الذي تمرره إلىArrayTransformer
.
يتم استخدام القيود بواسطة ArrayTransformer للسماح أو منع إضافة تواريخ معينة إلى RecurrenceCollection
. يوفر 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
على توسيع فئة ArrayCollection الخاصة بمشروع Doctrine.
يدعم 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
لا تتردد في التعليق أو تقديم طلبات السحب. يرجى تضمين الاختبارات مع العلاقات العامة.
Recurr مرخص بموجب ترخيص MIT. راجع ملف الترخيص للحصول على التفاصيل.