| [ Index ] |
PHP Cross Reference of Drupal 6 (yi-drupal) |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Test PHP 4 Timezone Conversion 4 */ 5 class DateRepeatTestCase extends DrupalWebTestCase { 6 function getInfo() { 7 return array( 8 'name' => t('Date repeat calculations'), 9 'description' => t('Test Date Repeat processes to create arrays of dates from iCal rules.') , 10 'group' => t('Date'), 11 ); 12 } 13 14 /** 15 * Implementation of setUp(). 16 */ 17 function setUp() { 18 // Load the date_repeat module. 19 parent::setUp('date_repeat'); 20 } 21 22 public function testDateRepeat() { 23 require_once('./'. drupal_get_path('module', 'date_api') .'/date_api_ical.inc'); 24 require_once('./'. drupal_get_path('module', 'date_repeat') .'/date_repeat_calc.inc'); 25 // Examples adapted from http://www.faqs.org/rfcs/rfc2445.html and 26 // http://www.kanzaki.com/docs/ical/rrule.html. 27 28 // Daily for 10 occurrences: 29 $start = "1997-09-02 09:00:00"; 30 $end = "1997-09-30 09:00:00"; 31 $rule = "RRULE:FREQ=DAILY;COUNT=10"; 32 $dates = date_repeat_calc($rule, $start, $end, array()); 33 // should be (1997 9:00 AM EDT)September 2-11 34 $shouldbe = '1997-09-02 09:00:00, 1997-09-03 09:00:00, 1997-09-04 09:00:00, 1997-09-05 09:00:00, 1997-09-06 09:00:00, 1997-09-07 09:00:00, 1997-09-08 09:00:00, 1997-09-09 09:00:00, 1997-09-10 09:00:00, 1997-09-11 09:00:00'; 35 $result = implode(', ', $dates); 36 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 37 38 //Daily until September 24, 1997: 39 $start = "1997-09-02 09:00:00"; 40 $end = "1997-09-30 09:00:00"; 41 $rule = "RRULE:FREQ=DAILY;UNTIL=19970924T000000Z"; 42 $dates = date_repeat_calc($rule, $start, $end, array()); 43 // should be (1997 9:00 AM EDT)September 2-23 44 $shouldbe = '1997-09-02 09:00:00, 1997-09-03 09:00:00, 1997-09-04 09:00:00, 1997-09-05 09:00:00, 1997-09-06 09:00:00, 1997-09-07 09:00:00, 1997-09-08 09:00:00, 1997-09-09 09:00:00, 1997-09-10 09:00:00, 1997-09-11 09:00:00, 1997-09-12 09:00:00, 1997-09-13 09:00:00, 1997-09-14 09:00:00, 1997-09-15 09:00:00, 1997-09-16 09:00:00, 1997-09-17 09:00:00, 1997-09-18 09:00:00, 1997-09-19 09:00:00, 1997-09-20 09:00:00, 1997-09-21 09:00:00, 1997-09-22 09:00:00, 1997-09-23 09:00:00'; 45 $result = implode(', ', $dates); 46 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 47 48 //Every other day - until September 30: 49 $start = "1997-09-02 09:00:00"; 50 $end = "1997-09-30 09:00:00"; 51 $rule = "RRULE:FREQ=DAILY;INTERVAL=2"; 52 $dates = date_repeat_calc($rule, $start, $end, array()); 53 // should be (1997 9:00 AM EDT)September2,4,6,8...24,26,28,30; 54 $shouldbe = '1997-09-02 09:00:00, 1997-09-04 09:00:00, 1997-09-06 09:00:00, 1997-09-08 09:00:00, 1997-09-10 09:00:00, 1997-09-12 09:00:00, 1997-09-14 09:00:00, 1997-09-16 09:00:00, 1997-09-18 09:00:00, 1997-09-20 09:00:00, 1997-09-22 09:00:00, 1997-09-24 09:00:00, 1997-09-26 09:00:00, 1997-09-28 09:00:00, 1997-09-30 09:00:00'; 55 $result = implode(', ', $dates); 56 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 57 58 //Every 10 days, 2 occurrences: 59 $start = "1997-09-02 09:00:00"; 60 $end = "1997-09-30 09:00:00"; 61 $rule = "RRULE:FREQ=DAILY;INTERVAL=10;COUNT=2"; 62 $dates = date_repeat_calc($rule, $start, $end, array()); 63 // should be (1997 9:00 AM EDT)September 2,12 64 $shouldbe = '1997-09-02 09:00:00, 1997-09-12 09:00:00'; 65 $result = implode(', ', $dates); 66 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 67 68 //Weekly for 3 occurrences 69 $start = "1997-09-02 09:00:00"; 70 $end = "1997-09-30 09:00:00"; 71 $rule = "RRULE:FREQ=WEEKLY;COUNT=3"; 72 $dates = date_repeat_calc($rule, $start, $end, array()); 73 // should be (1997 9:00 AM EDT)September 2,9,16 74 $shouldbe = '1997-09-02 09:00:00, 1997-09-09 09:00:00, 1997-09-16 09:00:00'; 75 $result = implode(', ', $dates); 76 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 77 78 //Weekly until September 24, 1997 79 $start = "1997-09-02 09:00:00"; 80 $end = "1997-09-30 09:00:00"; 81 $rule = "RRULE:FREQ=WEEKLY;UNTIL=19970924T000000Z"; 82 // ==> (1997 9:00 AM EDT)September 2,9,16,23 83 $dates = date_repeat_calc($rule, $start, $end, array()); 84 $shouldbe = '1997-09-02 09:00:00, 1997-09-09 09:00:00, 1997-09-16 09:00:00, 1997-09-23 09:00:00'; 85 $result = implode(', ', $dates); 86 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 87 88 //Every other week - forever: 89 $start = "1997-09-02 09:00:00"; 90 $end = "1997-09-30 09:00:00"; 91 $rule = "RRULE:FREQ=WEEKLY;INTERVAL=2;WKST=SU"; 92 // should be (1997 9:00 AM EDT)September 2,16,30 93 $dates = date_repeat_calc($rule, $start, $end, array()); 94 $shouldbe = '1997-09-02 09:00:00, 1997-09-16 09:00:00, 1997-09-30 09:00:00'; 95 $result = implode(', ', $dates); 96 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 97 98 //Weekly on Tuesday and Thursday for 4 weeks: 99 $start = "1997-09-02 09:00:00"; 100 $end = "1997-09-30 09:00:00"; 101 $rule = "RRULE:FREQ=WEEKLY;COUNT=8;WKST=SU;BYDAY=TU,TH"; 102 // should be(1997 9:00 AM EDT)September 2,4,9,11,16,18,23,25 103 $dates = date_repeat_calc($rule, $start, $end, array()); 104 $shouldbe = '1997-09-02 09:00:00, 1997-09-04 09:00:00, 1997-09-09 09:00:00, 1997-09-11 09:00:00, 1997-09-16 09:00:00, 1997-09-18 09:00:00, 1997-09-23 09:00:00, 1997-09-25 09:00:00'; 105 $result = implode(', ', $dates); 106 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 107 108 //Every other week on Tuesday and Thursday, for 5 occurrences: 109 $start = "1997-09-02 09:00:00"; 110 $end = "1997-09-30 09:00:00"; 111 $rule = "RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=5;WKST=SU;BYDAY=TU,TH"; 112 // should be (1997 9:00 AM EDT)September 2,4,16,18,30 113 $dates = date_repeat_calc($rule, $start, $end, array()); 114 $shouldbe = '1997-09-02 09:00:00, 1997-09-04 09:00:00, 1997-09-16 09:00:00, 1997-09-18 09:00:00, 1997-09-30 09:00:00'; 115 $result = implode(', ', $dates); 116 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 117 118 //Every other week on Monday, Wednesday and Friday until September 24, 1997, 119 $start = "1997-09-02 09:00:00"; 120 $end = "1997-09-30 09:00:00"; 121 $rule = "RRULE:FREQ=WEEKLY;INTERVAL=2;UNTIL=19970924T000000Z;WKST=SU;BYDAY=MO,WE,FR"; 122 // should be (1997 9:00 AM EDT)September 2,3,5,15,17,19 123 $dates = date_repeat_calc($rule, $start, $end, array()); 124 $shouldbe = '1997-09-02 09:00:00, 1997-09-03 09:00:00, 1997-09-05 09:00:00, 1997-09-15 09:00:00, 1997-09-17 09:00:00, 1997-09-19 09:00:00'; 125 $result = implode(', ', $dates); 126 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 127 128 //Monthly on the 1st Friday for 2 occurrences: 129 $start = "1997-09-05 09:00:00"; 130 $end = "1997-10-31 09:00:00"; 131 $rule = "RRULE:FREQ=MONTHLY;COUNT=2;BYDAY=1FR"; 132 // should be (1997 9:00 AM EDT)September 5;October 3 133 $dates = date_repeat_calc($rule, $start, $end, array()); 134 $shouldbe = '1997-09-05 09:00:00, 1997-10-03 09:00:00'; 135 $result = implode(', ', $dates); 136 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 137 138 //Monthly on the 1st Friday until December 24, 1997: 139 $start = "1997-09-05 09:00:00"; 140 $end = "1998-10-01 09:00:00"; 141 $rule = "RRULE:FREQ=MONTHLY;UNTIL=19971224T000000Z;BYDAY=1FR"; 142 $dates = date_repeat_calc($rule, $start, $end, array()); 143 $shouldbe = '1997-09-05 09:00:00, 1997-10-03 09:00:00, 1997-11-07 09:00:00, 1997-12-05 09:00:00'; 144 $result = implode(', ', $dates); 145 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 146 147 //Every other month on the 1st and last Sunday of the month for 10 occurrences: 148 $start = "1997-09-07 09:00:00"; 149 $end = "1998-10-01 09:00:00"; 150 $rule = "RRULE:FREQ=MONTHLY;INTERVAL=2;COUNT=10;BYDAY=1SU,-1SU"; 151 // ==> (1997 9:00 AM EDT)September 7,28 152 // (1997 9:00 AM EST)November 2,30 153 // (1998 9:00 AM EST)January 4,25;March 1,29 154 // (1998 9:00 AM EDT)May 3,31 155 $dates = date_repeat_calc($rule, $start, $end, array()); 156 $shouldbe = '1997-09-07 09:00:00, 1997-09-28 09:00:00, 1997-11-02 09:00:00, 1997-11-30 09:00:00, 1998-01-04 09:00:00, 1998-01-25 09:00:00, 1998-03-01 09:00:00, 1998-03-29 09:00:00, 1998-05-03 09:00:00, 1998-05-31 09:00:00'; 157 $result = implode(', ', $dates); 158 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 159 160 //Monthly on the second to last Monday of the month for 6 months: 161 $start = "1997-09-22 09:00:00"; 162 $end = "1998-10-01 09:00:00"; 163 $rule = "RRULE:FREQ=MONTHLY;COUNT=6;BYDAY=-2MO"; 164 //==> (1997 9:00 AM EDT)September 22;October 20 165 // (1997 9:00 AM EST)November 17;December 22 166 // (1998 9:00 AM EST)January 19;February 16 167 $dates = date_repeat_calc($rule, $start, $end, array()); 168 $shouldbe = '1997-09-22 09:00:00, 1997-10-20 09:00:00, 1997-11-17 09:00:00, 1997-12-22 09:00:00, 1998-01-19 09:00:00, 1998-02-16 09:00:00'; 169 $result = implode(', ', $dates); 170 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 171 172 //Every Tuesday, every other month: 173 $start = "1997-09-02 09:00:00"; 174 $end = "1998-02-01 09:00:00"; 175 $rule = "RRULE:FREQ=MONTHLY;INTERVAL=2;BYDAY=TU"; 176 // ==> (1997 9:00 AM EDT)September 2,9,16,23,30 177 // (1997 9:00 AM EST)November 4,11,18,25 178 // (1998 9:00 AM EST)January 6,13,20,27;March 3,10,17,24,31 179 $dates = date_repeat_calc($rule, $start, $end, array()); 180 $shouldbe = '1997-09-02 09:00:00, 1997-09-09 09:00:00, 1997-09-16 09:00:00, 1997-09-23 09:00:00, 1997-09-30 09:00:00, 1997-11-04 09:00:00, 1997-11-11 09:00:00, 1997-11-18 09:00:00, 1997-11-25 09:00:00, 1998-01-06 09:00:00, 1998-01-13 09:00:00, 1998-01-20 09:00:00, 1998-01-27 09:00:00'; 181 $result = implode(', ', $dates); 182 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 183 184 //Yearly in June and July for 10 occurrences: 185 $start = "1997-06-10 09:00:00"; 186 $end = "2002-01-01 09:00:00"; 187 $rule = "RRULE:FREQ=YEARLY;COUNT=10;BYMONTH=6,7"; 188 // ==> (1997 9:00 AM EDT)June 10;July 10 189 // (1998 9:00 AM EDT)June 10;July 10 190 // (1999 9:00 AM EDT)June 10;July 10 191 // (2000 9:00 AM EDT)June 10;July 10 192 // (2001 9:00 AM EDT)June 10;July 10 193 // Note: Since none of the BYDAY, BYMONTHDAY or BYYEARDAY components 194 // are specified, the day is gotten from DTSTART 195 $dates = date_repeat_calc($rule, $start, $end, array()); 196 $shouldbe = '1997-06-10 09:00:00, 1997-07-10 09:00:00, 1998-06-10 09:00:00, 1998-07-10 09:00:00, 1999-06-10 09:00:00, 1999-07-10 09:00:00, 2000-06-10 09:00:00, 2000-07-10 09:00:00, 2001-06-10 09:00:00, 2001-07-10 09:00:00'; 197 $result = implode(', ', $dates); 198 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 199 200 //Every other year on January, February, and March for 10 occurrences: 201 $start = "1997-03-10 09:00:00"; 202 $end = "2004-01-01 09:00:00"; 203 $rule = "RRULE:FREQ=YEARLY;INTERVAL=2;COUNT=10;BYMONTH=1,2,3"; 204 // ==> (1997 9:00 AM EST)March 10 205 // (1999 9:00 AM EST)January 10;February 10;March 10 206 // (2001 9:00 AM EST)January 10;February 10;March 10 207 // (2003 9:00 AM EST)January 10;February 10;March 10 208 $dates = date_repeat_calc($rule, $start, $end, array()); 209 $shouldbe = '1997-03-10 09:00:00, 1999-01-10 09:00:00, 1999-02-10 09:00:00, 1999-03-10 09:00:00, 2001-01-10 09:00:00, 2001-02-10 09:00:00, 2001-03-10 09:00:00, 2003-01-10 09:00:00, 2003-02-10 09:00:00, 2003-03-10 09:00:00'; 210 $result = implode(', ', $dates); 211 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 212 213 //An example where the days generated makes a difference because of WKST: 214 $start = "1997-08-05 09:00:00"; 215 $end = "2004-01-01 09:00:00"; 216 $rule = "RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=MO"; 217 // ==> (1997 EDT)Aug 5,10,19,24 218 $dates = date_repeat_calc($rule, $start, $end, array()); 219 $shouldbe = '1997-08-05 09:00:00, 1997-08-10 09:00:00, 1997-08-19 09:00:00, 1997-08-24 09:00:00'; 220 $result = implode(', ', $dates); 221 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 222 223 //changing only WKST from MO to SU, yields different results... 224 $start = "1997-08-05 09:00:00"; 225 $end = "2004-01-01 09:00:00"; 226 $rule = "RRULE:FREQ=WEEKLY;INTERVAL=2;COUNT=4;BYDAY=TU,SU;WKST=SU"; 227 // Result: 1997 EDT August 5,17,19,31; 228 $dates = date_repeat_calc($rule, $start, $end, array()); 229 $shouldbe = '1997-08-05 09:00:00, 1997-08-17 09:00:00, 1997-08-19 09:00:00, 1997-08-31 09:00:00'; 230 $result = implode(', ', $dates); 231 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 232 233 //Every 18 months on the 10th thru 15th of the month for 10 occurrences: 234 $start = "1997-09-10 09:00:00"; 235 $end = "2004-01-01 09:00:00"; 236 $rule = "RRULE:FREQ=MONTHLY;INTERVAL=18;COUNT=10;BYMONTHDAY=10,11,12,13,14,15"; 237 // ==> (1997 9:00 AM EDT)September 10,11,12,13,14,15 238 // (1999 9:00 AM EST)March 10,11,12,13 239 $dates = date_repeat_calc($rule, $start, $end, array()); 240 $shouldbe = '1997-09-10 09:00:00, 1997-09-11 09:00:00, 1997-09-12 09:00:00, 1997-09-13 09:00:00, 1997-09-14 09:00:00, 1997-09-15 09:00:00, 1999-03-10 09:00:00, 1999-03-11 09:00:00, 1999-03-12 09:00:00, 1999-03-13 09:00:00'; 241 $result = implode(', ', $dates); 242 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 243 244 //Monthly on the third to the last day of the month, forever: 245 $start = "1997-09-28 09:00:00"; 246 $end = "1998-03-01 09:00:00"; 247 $rule = "RRULE:FREQ=MONTHLY;BYMONTHDAY=-3"; 248 // ==> (1997 9:00 AM EDT)September 28 249 // (1997 9:00 AM EST)October 29;November 28;December 29 250 // (1998 9:00 AM EST)January 29;February 26 251 $dates = date_repeat_calc($rule, $start, $end, array()); 252 $shouldbe = '1997-09-28 09:00:00, 1997-10-29 09:00:00, 1997-11-28 09:00:00, 1997-12-29 09:00:00, 1998-01-29 09:00:00, 1998-02-26 09:00:00'; 253 $result = implode(', ', $dates); 254 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 255 256 //Every Thursday in March, forever: 257 // ==> (1997 9:00 AM EST)March 13,20,27 258 // (1998 9:00 AM EST)March 5,12,19,26 259 // (1999 9:00 AM EST)March 4,11,18,25 260 $start = "1997-03-13 09:00:00"; 261 $end = "1999-03-31 09:00:00"; 262 $rule = "RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=TH"; 263 $dates = date_repeat_calc($rule, $start, $end, array()); 264 $shouldbe = '1997-03-13 09:00:00, 1997-03-20 09:00:00, 1997-03-27 09:00:00, 1998-03-05 09:00:00, 1998-03-12 09:00:00, 1998-03-19 09:00:00, 1998-03-26 09:00:00, 1999-03-04 09:00:00, 1999-03-11 09:00:00, 1999-03-18 09:00:00, 1999-03-25 09:00:00'; 265 $result = implode(', ', $dates); 266 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 267 268 //Every Thursday, but only during June, July, and August, forever: 269 // ==> (1997 9:00 AM EDT)June 5,12,19,26;July 3,10,17,24,31;August 7,14,21,28 270 // (1998 9:00 AM EDT)June 4,11,18,25;July 2,9,16,23,30;August 6,13,20,27 271 // (1999 9:00 AM EDT)June 3,10,17,24;July 1,8,15,22,29;August 5,12,19,26 272 $start = "1997-06-05 09:00:00"; 273 $end = "1999-08-31 09:00:00"; 274 $rule = "RRULE:FREQ=YEARLY;BYDAY=TH;BYMONTH=6,7,8"; 275 $dates = date_repeat_calc($rule, $start, $end, array()); 276 $shouldbe = '1997-06-05 09:00:00, 1997-06-12 09:00:00, 1997-06-19 09:00:00, 1997-06-26 09:00:00, 1997-07-03 09:00:00, 1997-07-10 09:00:00, 1997-07-17 09:00:00, 1997-07-24 09:00:00, 1997-07-31 09:00:00, 1997-08-07 09:00:00, 1997-08-14 09:00:00, 1997-08-21 09:00:00, 1997-08-28 09:00:00, 1998-06-04 09:00:00, 1998-06-11 09:00:00, 1998-06-18 09:00:00, 1998-06-25 09:00:00, 1998-07-02 09:00:00, 1998-07-09 09:00:00, 1998-07-16 09:00:00, 1998-07-23 09:00:00, 1998-07-30 09:00:00, 1998-08-06 09:00:00, 1998-08-13 09:00:00, 1998-08-20 09:00:00, 1998-08-27 09:00:00, 1999-06-03 09:00:00, 1999-06-10 09:00:00, 1999-06-17 09:00:00, 1999-06-24 09:00:00, 1999-07-01 09:00:00, 1999-07-08 09:00:00, 1999-07-15 09:00:00, 1999-07-22 09:00:00, 1999-07-29 09:00:00, 1999-08-05 09:00:00, 1999-08-12 09:00:00, 1999-08-19 09:00:00, 1999-08-26 09:00:00'; 277 $result = implode(', ', $dates); 278 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 279 280 //Monthly on the 2nd and 15th of the month for 10 occurrences: 281 // ==> (1997 9:00 AM EDT)September 2,15;October 2,15 282 // (1997 9:00 AM EST)November 2,15;December 2,15 283 // (1998 9:00 AM EST)January 2,15 284 $start = "1997-09-02 09:00:00"; 285 $end = "1998-01-31 09:00:00"; 286 $rule = "RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=2,15"; 287 $dates = date_repeat_calc($rule, $start, $end, array()); 288 $shouldbe = '1997-09-02 09:00:00, 1997-09-15 09:00:00, 1997-10-02 09:00:00, 1997-10-15 09:00:00, 1997-11-02 09:00:00, 1997-11-15 09:00:00, 1997-12-02 09:00:00, 1997-12-15 09:00:00, 1998-01-02 09:00:00, 1998-01-15 09:00:00'; 289 $result = implode(', ', $dates); 290 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 291 292 //Monthly on the first and last day of the month for 10 occurrences: 293 // ==> (1997 9:00 AM EDT)September 30;October 1 294 // (1997 9:00 AM EST)October 31;November 1,30;December 1,31 295 // (1998 9:00 AM EST)January 1,31;February 1 296 $start = "1997-09-30 09:00:00"; 297 $end = "1998-03-31 09:00:00"; 298 $rule = "RRULE:FREQ=MONTHLY;COUNT=10;BYMONTHDAY=1,-1"; 299 $dates = date_repeat_calc($rule, $start, $end, array()); 300 $shouldbe = '1997-09-30 09:00:00, 1997-10-01 09:00:00, 1997-10-31 09:00:00, 1997-11-01 09:00:00, 1997-11-30 09:00:00, 1997-12-01 09:00:00, 1997-12-31 09:00:00, 1998-01-01 09:00:00, 1998-01-31 09:00:00, 1998-02-01 09:00:00'; 301 $result = implode(', ', $dates); 302 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 303 304 //Every Friday the 13th, forever: 305 $rule = "EXDATE;TZID=US-Eastern:19970902T090000"; 306 // ==> (1998 9:00 AM EST)February 13;March 13;November 13 307 // (1999 9:00 AM EDT)August 13 308 // (2000 9:00 AM EDT)October 13 309 $start = "1997-09-02 09:00:00"; 310 $end = "2000-12-31 09:00:00"; 311 $rule = "RRULE:FREQ=MONTHLY;BYDAY=FR;BYMONTHDAY=13"; 312 $dates = date_repeat_calc($rule, $start, $end, array()); 313 $shouldbe = '1997-09-02 09:00:00, 1998-02-13 09:00:00, 1998-03-13 09:00:00, 1998-11-13 09:00:00, 1999-08-13 09:00:00, 2000-10-13 09:00:00'; 314 $result = implode(', ', $dates); 315 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 316 317 //The first Saturday that follows the first Sunday of the month, forever: 318 // ==> (1997 9:00 AM EDT)September 13;October 11 319 // (1997 9:00 AM EST)November 8;December 13 320 // (1998 9:00 AM EST)January 10;February 7;March 7 321 // (1998 9:00 AM EDT)April 11;May 9;June 13... 322 $start = "1997-09-13 09:00:00"; 323 $end = "1998-06-30 09:00:00"; 324 $rule = "RRULE:FREQ=MONTHLY;BYDAY=SA;BYMONTHDAY=7,8,9,10,11,12,13"; 325 $dates = date_repeat_calc($rule, $start, $end, array()); 326 $shouldbe = '1997-09-13 09:00:00, 1997-10-11 09:00:00, 1997-11-08 09:00:00, 1997-12-13 09:00:00, 1998-01-10 09:00:00, 1998-02-07 09:00:00, 1998-03-07 09:00:00, 1998-04-11 09:00:00, 1998-05-09 09:00:00, 1998-06-13 09:00:00'; 327 $result = implode(', ', $dates); 328 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 329 330 //Every four years, the first Tuesday after a Monday in November, 331 //forever (U.S. Presidential Election day): 332 // ==> (1996 9:00 AM EST)November 5 333 // (2000 9:00 AM EST)November 7 334 // (2004 9:00 AM EST)November 2 335 $start = "1996-11-05 09:00:00"; 336 $end = "2004-11-30 09:00:00"; 337 $rule = "RRULE:FREQ=YEARLY;INTERVAL=4;BYMONTH=11;BYDAY=TU;BYMONTHDAY=2,3,4,5,6,7,8"; 338 $shouldbe = '1996-11-05 09:00:00, 2000-11-07 09:00:00, 2004-11-02 09:00:00'; 339 $dates = date_repeat_calc($rule, $start, $end, array()); 340 $result = implode(', ', $dates); 341 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 342 343 //Every 20th Monday of the year, forever: 344 $start = "1997-05-19 09:00:00"; 345 $end = "2000-01-01 09:00:00"; 346 $rule = "RRULE:FREQ=YEARLY;BYDAY=20MO"; 347 // ==> (1997 9:00 AM EDT)May 19 348 // (1998 9:00 AM EDT)May 18 349 // (1999 9:00 AM EDT)May 17 350 $dates = date_repeat_calc($rule, $start, $end, array()); 351 $shouldbe = '1997-05-19 09:00:00, 1998-05-18 09:00:00, 1999-05-17 09:00:00'; 352 $result = implode(', ', $dates); 353 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 354 355 //Every Sunday in January, every other year, forever: 356 $start = "1997-01-05 09:00:00"; 357 $end = "2001-02-01 09:00:00"; 358 $rule = 'RRULE:FREQ=YEARLY;INTERVAL=2;BYMONTH=1;BYDAY=SU'; 359 // ==> (1997 9:00 AM EDT)January 5,12,19,26 360 // (1999 9:00 AM EDT)January 3,10,17,24,31 361 // (2001 9:00 AM EDT)January 7,14,21,28 362 $dates = date_repeat_calc($rule, $start, $end, array()); 363 $shouldbe = '1997-01-05 09:00:00, 1997-01-12 09:00:00, 1997-01-19 09:00:00, 1997-01-26 09:00:00, 1999-01-03 09:00:00, 1999-01-10 09:00:00, 1999-01-17 09:00:00, 1999-01-24 09:00:00, 1999-01-31 09:00:00, 2001-01-07 09:00:00, 2001-01-14 09:00:00, 2001-01-21 09:00:00, 2001-01-28 09:00:00'; 364 $result = implode(', ', $dates); 365 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 366 367 return; 368 369 //Every Thanksgiving, forever: 370 $start = "1997-01-01 09:00:00"; 371 $end = "2001-02-01 09:00:00"; 372 $rule = 'RRULE:FREQ=YEARLY;INTERVAL=1;BYMONTH=11;BYDAY=4TH'; 373 // ==> (1997 9:00 AM EDT)Nov 374 // (1999 9:00 AM EDT)Nov 375 // (2001 9:00 AM EDT)Nov 376 $dates = date_repeat_calc($rule, $start, $end, array()); 377 $shouldbe = ''; 378 $result = implode(', ', $dates); 379 $this->assertEqual($result, $shouldbe, $rule .'; Starting '.$start .'; results: '. $result); 380 381 // TODO: 382 // BYYEARDAY, BYSETPOS, 383 // BYHOUR, BYMINUTE, HOURLY, MINUTELY, SECONDLY 384 // have not yet been implemented in date_repeat. 385 386 //Every 3rd year on the 1st, 100th and 200th day for 10 occurrences: 387 $date = "DTSTART;TZID=US-Eastern:19970101T090000"; 388 $rule = "RRULE:FREQ=YEARLY;INTERVAL=3;COUNT=10;BYYEARDAY=1,100,200"; 389 // ==> (1997 9:00 AM EST)January 1 390 // (1997 9:00 AM EDT)April 10;July 19 391 // (2000 9:00 AM EST)January 1 392 // (2000 9:00 AM EDT)April 9;July 18 393 // (2003 9:00 AM EST)January 1 394 // (2003 9:00 AM EDT)April 10;July 19 395 // (2006 9:00 AM EST)January 1 396 397 //Monday of week number 20 (where the default start of the week is Monday), forever: 398 $date = "DTSTART;TZID=US-Eastern:19970512T090000"; 399 $rule = "RRULE:FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO"; 400 // ==> (1997 9:00 AM EDT)May 12 401 // (1998 9:00 AM EDT)May 11 402 // (1999 9:00 AM EDT)May 17 403 404 //The 3rd instance into the month of one of Tuesday, Wednesday or 405 //Thursday, for the next 3 months: 406 $date = "DTSTART;TZID=US-Eastern:19970904T090000"; 407 $rule = "RRULE:FREQ=MONTHLY;COUNT=3;BYDAY=TU,WE,TH;BYSETPOS=3"; 408 // ==> (1997 9:00 AM EDT)September 4;October 7 409 // (1997 9:00 AM EST)November 6 410 411 //The 2nd to last weekday of the month: 412 $date = "DTSTART;TZID=US-Eastern:19970929T090000"; 413 $rule = "RRULE:FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-2"; 414 // ==> (1997 9:00 AM EDT)September 29 415 // (1997 9:00 AM EST)October 30;November 27;December 30 416 // (1998 9:00 AM EST)January 29;February 26;March 30 417 418 //Every 3 hours from 9:00 AM to 5:00 PM on a specific day: 419 $date = "DTSTART;TZID=US-Eastern:19970902T090000"; 420 $rule = "RRULE:FREQ=HOURLY;INTERVAL=3;UNTIL=19970902T170000Z"; 421 // ==> (September 2, 1997 EDT)09:00,12:00,15:00 422 423 //Every 15 minutes for 6 occurrences: 424 $date = "DTSTART;TZID=US-Eastern:19970902T090000"; 425 $rule = "RRULE:FREQ=MINUTELY;INTERVAL=15;COUNT=6"; 426 // ==> (September 2, 1997 EDT)09:00,09:15,09:30,09:45,10:00,10:15 427 428 //Every hour and a half for 4 occurrences: 429 $date = "DTSTART;TZID=US-Eastern:19970902T090000"; 430 $rule = "RRULE:FREQ=MINUTELY;INTERVAL=90;COUNT=4"; 431 // ==> (September 2, 1997 EDT)09:00,10:30;12:00;13:30 432 433 //Every 20 minutes from 9:00 AM to 4:40 PM every day: 434 $date = "DTSTART;TZID=US-Eastern:19970902T090000"; 435 $rule = "RRULE:FREQ=DAILY;BYHOUR=9,10,11,12,13,14,15,16;BYMINUTE=0,20,40"; 436 // or 437 $rule = "RRULE:FREQ=MINUTELY;INTERVAL=20;BYHOUR=9,10,11,12,13,14,15,16"; 438 // ==> (September 2, 1997 EDT)9:00,9:20,9:40,10:00,10:20,16:00,16:20,16:40 439 // (September 3, 1997 EDT)9:00,9:20,9:40,10:00,10:20,16:00,16:20,16:40 440 441 } 442 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Mon Jul 9 18:01:44 2012 | Cross-referenced by PHPXref 0.7 |