Recurr는 반복 규칙(RRULE)을 사용하고 이를 DateTime 개체로 변환하기 위한 PHP 라이브러리입니다.
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(...)
Recurrence
객체의 RecurrenceCollection
반환합니다.Recurrence
에는 DateTime
객체를 반환하는 getStart()
및 getEnd()
메서드가 있습니다.Rule
종료 날짜가 없으면 getEnd()
getStart()
와 동일한 DateTime
객체를 반환합니다.참고: 변환기에는 생성되는 개체 수에 대한 "가상" 제한(기본값 732)이 있습니다. 이렇게 하면 무한히 반복되는 규칙으로 인해 스크립트가 충돌하는 것을 방지할 수 있습니다.
ArrayTransformer
에 전달하는ArrayTransformerConfig
객체를 사용하여 가상 제한을 변경할 수 있습니다.
제약 조건은 ArrayTransformer에서 특정 날짜가 RecurrenceCollection
에 추가되는 것을 허용하거나 방지하는 데 사용됩니다. 반복은 다음과 같은 제약 조건을 제공합니다.
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 클래스를 확장합니다.
반복은 일부 반복 규칙을 사람이 읽을 수 있는 텍스트로 변환하는 것을 지원합니다. 이 기능은 아직 베타 버전이며 연간, 월간, 주간 및 일일 빈도만 지원합니다.
$ 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 파일을 참조하세요.