Recurr adalah perpustakaan PHP untuk bekerja dengan aturan perulangan (RRULE) dan mengubahnya menjadi objek DateTime.
Recurr dikembangkan sebagai pendahulu kalender dengan acara berulang, dan sangat terinspirasi oleh rrule.js.
Cara yang disarankan untuk menginstal Recurr adalah melalui Composer.
composer require simshaun/recurrAnda dapat membuat objek Aturan baru dengan meneruskan string (RRULE) atau larik yang berisi bagian aturan, tanggal mulai, tanggal akhir (opsional), dan zona waktu.
$ 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 );Anda juga dapat menggunakan metode berantai untuk membuat aturan secara terprogram dan mendapatkan RRULE yang dihasilkan.
$ 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(...) mengembalikan objek RecurrenceCollection dari Recurrence .Recurrence memiliki metode getStart() dan getEnd() yang mengembalikan objek DateTime .Rule yang diubah tidak memiliki tanggal akhir, getEnd() akan mengembalikan objek DateTime yang sama dengan getStart() .Catatan: Trafo memiliki batas "virtual" (default 732) pada jumlah objek yang dihasilkannya. Hal ini mencegah skrip mogok pada aturan yang berulang tanpa batas. Anda dapat mengubah batas virtual dengan objek
ArrayTransformerConfigyang Anda teruskan keArrayTransformer.
Batasan digunakan oleh ArrayTransformer untuk mengizinkan atau mencegah tanggal tertentu ditambahkan ke RecurrenceCollection . Recurr memberikan batasan berikut:
AfterConstraint(DateTime $after, $inc = false)BeforeConstraint(DateTime $before, $inc = false)BetweenConstraint(DateTime $after, DateTime $before, $inc = false) $inc mendefinisikan apa yang terjadi jika $after atau $before merupakan pengulangan. Jika $inc = true , mereka akan disertakan dalam koleksi. Misalnya,
$ 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 ));Catatan: Jika membuat batasan Anda sendiri, penting untuk mengetahui bahwa tanggal yang tidak memenuhi persyaratan batasan tidak diperhitungkan dalam batas virtual transformator. Jika Anda menyetel properti
$stopsTransformerbatasan Anda secara manual kefalse, trafo mungkin mogok melalui loop tak terbatas. LihatBetweenConstraintuntuk contoh cara mencegahnya.
RecurrenceCollection Pasca Transformasi RecurrenceCollection menyediakan metode pembantu yang dapat dirantai berikut untuk menyaring pengulangan:
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 mendefinisikan apa yang terjadi jika $after atau $before merupakan pengulangan. Jika $inc = true , mereka akan disertakan dalam koleksi yang difilter. Misalnya,
pseudo...
2014-06-01 startsBetween(2014-06-01, 2014-06-20) // false
2014-06-01 startsBetween(2014-06-01, 2014-06-20, true) // true
Catatan:
RecurrenceCollectionmemperluas kelas ArrayCollection proyek Doktrin.
Recurr mendukung transformasi beberapa aturan perulangan menjadi teks yang dapat dibaca manusia. Fitur ini masih dalam versi beta dan hanya mendukung frekuensi tahunan, bulanan, mingguan, dan harian.
$ rule = new Rule ( ' FREQ=YEARLY;INTERVAL=2;COUNT=3; ' , new DateTime ());
$ textTransformer = new TextTransformer ();
echo $ textTransformer -> transform ( $ rule );Jika Anda membutuhkan lebih dari bahasa Inggris, Anda dapat menggunakan penerjemah dengan salah satu bahasa lokal yang didukung (lihat folder terjemahan) .
$ rule = new Rule ( ' FREQ=YEARLY;INTERVAL=2;COUNT=3; ' , new DateTime ());
$ textTransformer = new TextTransformer (
new Recurr Transformer Translator ( ' de ' )
);
echo $ textTransformer -> transform ( $ rule );Perilaku ini dapat dikonfigurasi:
$ 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 Jangan ragu untuk berkomentar atau membuat permintaan tarik. Harap sertakan tes dengan PR.
Recurr dilisensikan di bawah Lisensi MIT. Lihat file LISENSI untuk detailnya.