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. راجع ملف الترخيص للحصول على التفاصيل.