annotate vendor/symfony/var-dumper/Tests/Caster/DateCasterTest.php @ 12:7a779792577d

Update Drupal core to v8.4.5 (via Composer)
author Chris Cannam
date Fri, 23 Feb 2018 15:52:07 +0000
parents
children 129ea1e6d783
rev   line source
Chris@12 1 <?php
Chris@12 2
Chris@12 3 /*
Chris@12 4 * This file is part of the Symfony package.
Chris@12 5 *
Chris@12 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@12 7 *
Chris@12 8 * For the full copyright and license information, please view the LICENSE
Chris@12 9 * file that was distributed with this source code.
Chris@12 10 */
Chris@12 11
Chris@12 12 namespace Symfony\Component\VarDumper\Tests\Caster;
Chris@12 13
Chris@12 14 use PHPUnit\Framework\TestCase;
Chris@12 15 use Symfony\Component\VarDumper\Caster\Caster;
Chris@12 16 use Symfony\Component\VarDumper\Caster\DateCaster;
Chris@12 17 use Symfony\Component\VarDumper\Cloner\Stub;
Chris@12 18 use Symfony\Component\VarDumper\Test\VarDumperTestTrait;
Chris@12 19
Chris@12 20 /**
Chris@12 21 * @author Dany Maillard <danymaillard93b@gmail.com>
Chris@12 22 */
Chris@12 23 class DateCasterTest extends TestCase
Chris@12 24 {
Chris@12 25 use VarDumperTestTrait;
Chris@12 26
Chris@12 27 /**
Chris@12 28 * @dataProvider provideDateTimes
Chris@12 29 */
Chris@12 30 public function testDumpDateTime($time, $timezone, $xDate, $xTimestamp)
Chris@12 31 {
Chris@12 32 if ((defined('HHVM_VERSION_ID') || PHP_VERSION_ID <= 50509) && preg_match('/[-+]\d{2}:\d{2}/', $timezone)) {
Chris@12 33 $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
Chris@12 34 }
Chris@12 35
Chris@12 36 $date = new \DateTime($time, new \DateTimeZone($timezone));
Chris@12 37
Chris@12 38 $xDump = <<<EODUMP
Chris@12 39 DateTime @$xTimestamp {
Chris@12 40 date: $xDate
Chris@12 41 }
Chris@12 42 EODUMP;
Chris@12 43
Chris@12 44 $this->assertDumpEquals($xDump, $date);
Chris@12 45 }
Chris@12 46
Chris@12 47 /**
Chris@12 48 * @dataProvider provideDateTimes
Chris@12 49 */
Chris@12 50 public function testCastDateTime($time, $timezone, $xDate, $xTimestamp, $xInfos)
Chris@12 51 {
Chris@12 52 if ((defined('HHVM_VERSION_ID') || PHP_VERSION_ID <= 50509) && preg_match('/[-+]\d{2}:\d{2}/', $timezone)) {
Chris@12 53 $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
Chris@12 54 }
Chris@12 55
Chris@12 56 $stub = new Stub();
Chris@12 57 $date = new \DateTime($time, new \DateTimeZone($timezone));
Chris@12 58 $cast = DateCaster::castDateTime($date, array('foo' => 'bar'), $stub, false, 0);
Chris@12 59
Chris@12 60 $xDump = <<<EODUMP
Chris@12 61 array:1 [
Chris@12 62 "\\x00~\\x00date" => $xDate
Chris@12 63 ]
Chris@12 64 EODUMP;
Chris@12 65
Chris@12 66 $this->assertDumpEquals($xDump, $cast);
Chris@12 67
Chris@12 68 $xDump = <<<EODUMP
Chris@12 69 Symfony\Component\VarDumper\Caster\ConstStub {
Chris@12 70 +type: 1
Chris@12 71 +class: "$xDate"
Chris@12 72 +value: "%A$xInfos%A"
Chris@12 73 +cut: 0
Chris@12 74 +handle: 0
Chris@12 75 +refCount: 0
Chris@12 76 +position: 0
Chris@12 77 +attr: []
Chris@12 78 }
Chris@12 79 EODUMP;
Chris@12 80
Chris@12 81 $this->assertDumpMatchesFormat($xDump, $cast["\0~\0date"]);
Chris@12 82 }
Chris@12 83
Chris@12 84 public function provideDateTimes()
Chris@12 85 {
Chris@12 86 return array(
Chris@12 87 array('2017-04-30 00:00:00.000000', 'Europe/Zurich', '2017-04-30 00:00:00.0 Europe/Zurich (+02:00)', 1493503200, 'Sunday, April 30, 2017%Afrom now%ADST On'),
Chris@12 88 array('2017-12-31 00:00:00.000000', 'Europe/Zurich', '2017-12-31 00:00:00.0 Europe/Zurich (+01:00)', 1514674800, 'Sunday, December 31, 2017%Afrom now%ADST Off'),
Chris@12 89 array('2017-04-30 00:00:00.000000', '+02:00', '2017-04-30 00:00:00.0 +02:00', 1493503200, 'Sunday, April 30, 2017%Afrom now'),
Chris@12 90
Chris@12 91 array('2017-04-30 00:00:00.100000', '+00:00', '2017-04-30 00:00:00.100 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
Chris@12 92 array('2017-04-30 00:00:00.120000', '+00:00', '2017-04-30 00:00:00.120 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
Chris@12 93 array('2017-04-30 00:00:00.123000', '+00:00', '2017-04-30 00:00:00.123 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
Chris@12 94 array('2017-04-30 00:00:00.123400', '+00:00', '2017-04-30 00:00:00.123400 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
Chris@12 95 array('2017-04-30 00:00:00.123450', '+00:00', '2017-04-30 00:00:00.123450 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
Chris@12 96 array('2017-04-30 00:00:00.123456', '+00:00', '2017-04-30 00:00:00.123456 +00:00', 1493510400, 'Sunday, April 30, 2017%Afrom now'),
Chris@12 97 );
Chris@12 98 }
Chris@12 99
Chris@12 100 /**
Chris@12 101 * @dataProvider provideIntervals
Chris@12 102 */
Chris@12 103 public function testDumpInterval($intervalSpec, $ms, $invert, $expected)
Chris@12 104 {
Chris@12 105 if ($ms && PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
Chris@12 106 $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
Chris@12 107 }
Chris@12 108
Chris@12 109 $interval = $this->createInterval($intervalSpec, $ms, $invert);
Chris@12 110
Chris@12 111 $xDump = <<<EODUMP
Chris@12 112 DateInterval {
Chris@12 113 interval: $expected
Chris@12 114 %A}
Chris@12 115 EODUMP;
Chris@12 116
Chris@12 117 $this->assertDumpMatchesFormat($xDump, $interval);
Chris@12 118 }
Chris@12 119
Chris@12 120 /**
Chris@12 121 * @dataProvider provideIntervals
Chris@12 122 */
Chris@12 123 public function testDumpIntervalExcludingVerbosity($intervalSpec, $ms, $invert, $expected)
Chris@12 124 {
Chris@12 125 if ($ms && PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
Chris@12 126 $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
Chris@12 127 }
Chris@12 128
Chris@12 129 $interval = $this->createInterval($intervalSpec, $ms, $invert);
Chris@12 130
Chris@12 131 $xDump = <<<EODUMP
Chris@12 132 DateInterval {
Chris@12 133 interval: $expected
Chris@12 134 }
Chris@12 135 EODUMP;
Chris@12 136
Chris@12 137 $this->assertDumpEquals($xDump, $interval, Caster::EXCLUDE_VERBOSE);
Chris@12 138 }
Chris@12 139
Chris@12 140 /**
Chris@12 141 * @dataProvider provideIntervals
Chris@12 142 */
Chris@12 143 public function testCastInterval($intervalSpec, $ms, $invert, $xInterval, $xSeconds)
Chris@12 144 {
Chris@12 145 if ($ms && PHP_VERSION_ID >= 70200 && version_compare(PHP_VERSION, '7.2.0rc3', '<=')) {
Chris@12 146 $this->markTestSkipped('Skipped on 7.2 before rc4 because of php bug #75354.');
Chris@12 147 }
Chris@12 148
Chris@12 149 $interval = $this->createInterval($intervalSpec, $ms, $invert);
Chris@12 150 $stub = new Stub();
Chris@12 151
Chris@12 152 $cast = DateCaster::castInterval($interval, array('foo' => 'bar'), $stub, false, Caster::EXCLUDE_VERBOSE);
Chris@12 153
Chris@12 154 $xDump = <<<EODUMP
Chris@12 155 array:1 [
Chris@12 156 "\\x00~\\x00interval" => $xInterval
Chris@12 157 ]
Chris@12 158 EODUMP;
Chris@12 159
Chris@12 160 $this->assertDumpEquals($xDump, $cast);
Chris@12 161
Chris@12 162 if (null === $xSeconds) {
Chris@12 163 return;
Chris@12 164 }
Chris@12 165
Chris@12 166 $xDump = <<<EODUMP
Chris@12 167 Symfony\Component\VarDumper\Caster\ConstStub {
Chris@12 168 +type: 1
Chris@12 169 +class: "$xInterval"
Chris@12 170 +value: "$xSeconds"
Chris@12 171 +cut: 0
Chris@12 172 +handle: 0
Chris@12 173 +refCount: 0
Chris@12 174 +position: 0
Chris@12 175 +attr: []
Chris@12 176 }
Chris@12 177 EODUMP;
Chris@12 178
Chris@12 179 $this->assertDumpMatchesFormat($xDump, $cast["\0~\0interval"]);
Chris@12 180 }
Chris@12 181
Chris@12 182 public function provideIntervals()
Chris@12 183 {
Chris@12 184 $i = new \DateInterval('PT0S');
Chris@12 185 $ms = ($withMs = \PHP_VERSION_ID >= 70100 && isset($i->f)) ? '.0' : '';
Chris@12 186
Chris@12 187 return array(
Chris@12 188 array('PT0S', 0, 0, '0s', '0s'),
Chris@12 189 array('PT0S', 0.1, 0, $withMs ? '+ 00:00:00.100' : '0s', '%is'),
Chris@12 190 array('PT1S', 0, 0, '+ 00:00:01'.$ms, '%is'),
Chris@12 191 array('PT2M', 0, 0, '+ 00:02:00'.$ms, '%is'),
Chris@12 192 array('PT3H', 0, 0, '+ 03:00:00'.$ms, '%ss'),
Chris@12 193 array('P4D', 0, 0, '+ 4d', '%ss'),
Chris@12 194 array('P5M', 0, 0, '+ 5m', null),
Chris@12 195 array('P6Y', 0, 0, '+ 6y', null),
Chris@12 196 array('P1Y2M3DT4H5M6S', 0, 0, '+ 1y 2m 3d 04:05:06'.$ms, null),
Chris@12 197 array('PT1M60S', 0, 0, '+ 00:02:00'.$ms, null),
Chris@12 198 array('PT1H60M', 0, 0, '+ 02:00:00'.$ms, null),
Chris@12 199 array('P1DT24H', 0, 0, '+ 2d', null),
Chris@12 200 array('P1M32D', 0, 0, '+ 1m 32d', null),
Chris@12 201
Chris@12 202 array('PT0S', 0, 1, '0s', '0s'),
Chris@12 203 array('PT0S', 0.1, 1, $withMs ? '- 00:00:00.100' : '0s', '%is'),
Chris@12 204 array('PT1S', 0, 1, '- 00:00:01'.$ms, '%is'),
Chris@12 205 array('PT2M', 0, 1, '- 00:02:00'.$ms, '%is'),
Chris@12 206 array('PT3H', 0, 1, '- 03:00:00'.$ms, '%ss'),
Chris@12 207 array('P4D', 0, 1, '- 4d', '%ss'),
Chris@12 208 array('P5M', 0, 1, '- 5m', null),
Chris@12 209 array('P6Y', 0, 1, '- 6y', null),
Chris@12 210 array('P1Y2M3DT4H5M6S', 0, 1, '- 1y 2m 3d 04:05:06'.$ms, null),
Chris@12 211 array('PT1M60S', 0, 1, '- 00:02:00'.$ms, null),
Chris@12 212 array('PT1H60M', 0, 1, '- 02:00:00'.$ms, null),
Chris@12 213 array('P1DT24H', 0, 1, '- 2d', null),
Chris@12 214 array('P1M32D', 0, 1, '- 1m 32d', null),
Chris@12 215 );
Chris@12 216 }
Chris@12 217
Chris@12 218 /**
Chris@12 219 * @dataProvider provideTimeZones
Chris@12 220 */
Chris@12 221 public function testDumpTimeZone($timezone, $expected)
Chris@12 222 {
Chris@12 223 if ((defined('HHVM_VERSION_ID') || PHP_VERSION_ID <= 50509) && !preg_match('/\w+\/\w+/', $timezone)) {
Chris@12 224 $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
Chris@12 225 }
Chris@12 226
Chris@12 227 $timezone = new \DateTimeZone($timezone);
Chris@12 228
Chris@12 229 $xDump = <<<EODUMP
Chris@12 230 DateTimeZone {
Chris@12 231 timezone: $expected
Chris@12 232 %A}
Chris@12 233 EODUMP;
Chris@12 234
Chris@12 235 $this->assertDumpMatchesFormat($xDump, $timezone);
Chris@12 236 }
Chris@12 237
Chris@12 238 /**
Chris@12 239 * @dataProvider provideTimeZones
Chris@12 240 */
Chris@12 241 public function testDumpTimeZoneExcludingVerbosity($timezone, $expected)
Chris@12 242 {
Chris@12 243 if ((defined('HHVM_VERSION_ID') || PHP_VERSION_ID <= 50509) && !preg_match('/\w+\/\w+/', $timezone)) {
Chris@12 244 $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
Chris@12 245 }
Chris@12 246
Chris@12 247 $timezone = new \DateTimeZone($timezone);
Chris@12 248
Chris@12 249 $xDump = <<<EODUMP
Chris@12 250 DateTimeZone {
Chris@12 251 timezone: $expected
Chris@12 252 }
Chris@12 253 EODUMP;
Chris@12 254
Chris@12 255 $this->assertDumpMatchesFormat($xDump, $timezone, Caster::EXCLUDE_VERBOSE);
Chris@12 256 }
Chris@12 257
Chris@12 258 /**
Chris@12 259 * @dataProvider provideTimeZones
Chris@12 260 */
Chris@12 261 public function testCastTimeZone($timezone, $xTimezone, $xRegion)
Chris@12 262 {
Chris@12 263 if ((defined('HHVM_VERSION_ID') || PHP_VERSION_ID <= 50509) && !preg_match('/\w+\/\w+/', $timezone)) {
Chris@12 264 $this->markTestSkipped('DateTimeZone GMT offsets are supported since 5.5.10. See https://github.com/facebook/hhvm/issues/5875 for HHVM.');
Chris@12 265 }
Chris@12 266
Chris@12 267 $timezone = new \DateTimeZone($timezone);
Chris@12 268 $stub = new Stub();
Chris@12 269
Chris@12 270 $cast = DateCaster::castTimeZone($timezone, array('foo' => 'bar'), $stub, false, Caster::EXCLUDE_VERBOSE);
Chris@12 271
Chris@12 272 $xDump = <<<EODUMP
Chris@12 273 array:1 [
Chris@12 274 "\\x00~\\x00timezone" => $xTimezone
Chris@12 275 ]
Chris@12 276 EODUMP;
Chris@12 277
Chris@12 278 $this->assertDumpMatchesFormat($xDump, $cast);
Chris@12 279
Chris@12 280 $xDump = <<<EODUMP
Chris@12 281 Symfony\Component\VarDumper\Caster\ConstStub {
Chris@12 282 +type: 1
Chris@12 283 +class: "$xTimezone"
Chris@12 284 +value: "$xRegion"
Chris@12 285 +cut: 0
Chris@12 286 +handle: 0
Chris@12 287 +refCount: 0
Chris@12 288 +position: 0
Chris@12 289 +attr: []
Chris@12 290 }
Chris@12 291 EODUMP;
Chris@12 292
Chris@12 293 $this->assertDumpMatchesFormat($xDump, $cast["\0~\0timezone"]);
Chris@12 294 }
Chris@12 295
Chris@12 296 public function provideTimeZones()
Chris@12 297 {
Chris@12 298 $xRegion = extension_loaded('intl') ? '%s' : '';
Chris@12 299
Chris@12 300 return array(
Chris@12 301 // type 1 (UTC offset)
Chris@12 302 array('-12:00', '-12:00', ''),
Chris@12 303 array('+00:00', '+00:00', ''),
Chris@12 304 array('+14:00', '+14:00', ''),
Chris@12 305
Chris@12 306 // type 2 (timezone abbreviation)
Chris@12 307 array('GMT', '+00:00', ''),
Chris@12 308 array('a', '+01:00', ''),
Chris@12 309 array('b', '+02:00', ''),
Chris@12 310 array('z', '+00:00', ''),
Chris@12 311
Chris@12 312 // type 3 (timezone identifier)
Chris@12 313 array('Africa/Tunis', 'Africa/Tunis (%s:00)', $xRegion),
Chris@12 314 array('America/Panama', 'America/Panama (%s:00)', $xRegion),
Chris@12 315 array('Asia/Jerusalem', 'Asia/Jerusalem (%s:00)', $xRegion),
Chris@12 316 array('Atlantic/Canary', 'Atlantic/Canary (%s:00)', $xRegion),
Chris@12 317 array('Australia/Perth', 'Australia/Perth (%s:00)', $xRegion),
Chris@12 318 array('Europe/Zurich', 'Europe/Zurich (%s:00)', $xRegion),
Chris@12 319 array('Pacific/Tahiti', 'Pacific/Tahiti (%s:00)', $xRegion),
Chris@12 320 );
Chris@12 321 }
Chris@12 322
Chris@12 323 /**
Chris@12 324 * @dataProvider providePeriods
Chris@12 325 */
Chris@12 326 public function testDumpPeriod($start, $interval, $end, $options, $expected)
Chris@12 327 {
Chris@12 328 if (defined('HHVM_VERSION_ID') || \PHP_VERSION_ID < 50620 || (\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70005)) {
Chris@12 329 $this->markTestSkipped();
Chris@12 330 }
Chris@12 331
Chris@12 332 $p = new \DatePeriod(new \DateTime($start), new \DateInterval($interval), is_int($end) ? $end : new \DateTime($end), $options);
Chris@12 333
Chris@12 334 $xDump = <<<EODUMP
Chris@12 335 DatePeriod {
Chris@12 336 period: $expected
Chris@12 337 %A}
Chris@12 338 EODUMP;
Chris@12 339
Chris@12 340 $this->assertDumpMatchesFormat($xDump, $p);
Chris@12 341 }
Chris@12 342
Chris@12 343 /**
Chris@12 344 * @dataProvider providePeriods
Chris@12 345 */
Chris@12 346 public function testCastPeriod($start, $interval, $end, $options, $xPeriod, $xDates)
Chris@12 347 {
Chris@12 348 if (defined('HHVM_VERSION_ID') || \PHP_VERSION_ID < 50620 || (\PHP_VERSION_ID >= 70000 && \PHP_VERSION_ID < 70005)) {
Chris@12 349 $this->markTestSkipped();
Chris@12 350 }
Chris@12 351
Chris@12 352 $p = new \DatePeriod(new \DateTime($start), new \DateInterval($interval), is_int($end) ? $end : new \DateTime($end), $options);
Chris@12 353 $stub = new Stub();
Chris@12 354
Chris@12 355 $cast = DateCaster::castPeriod($p, array(), $stub, false, 0);
Chris@12 356
Chris@12 357 $xDump = <<<EODUMP
Chris@12 358 array:1 [
Chris@12 359 "\\x00~\\x00period" => $xPeriod
Chris@12 360 ]
Chris@12 361 EODUMP;
Chris@12 362
Chris@12 363 $this->assertDumpEquals($xDump, $cast);
Chris@12 364
Chris@12 365 $xDump = <<<EODUMP
Chris@12 366 Symfony\Component\VarDumper\Caster\ConstStub {
Chris@12 367 +type: 1
Chris@12 368 +class: "$xPeriod"
Chris@12 369 +value: "%A$xDates%A"
Chris@12 370 +cut: 0
Chris@12 371 +handle: 0
Chris@12 372 +refCount: 0
Chris@12 373 +position: 0
Chris@12 374 +attr: []
Chris@12 375 }
Chris@12 376 EODUMP;
Chris@12 377
Chris@12 378 $this->assertDumpMatchesFormat($xDump, $cast["\0~\0period"]);
Chris@12 379 }
Chris@12 380
Chris@12 381 public function providePeriods()
Chris@12 382 {
Chris@12 383 $i = new \DateInterval('PT0S');
Chris@12 384 $ms = \PHP_VERSION_ID >= 70100 && isset($i->f) ? '.0' : '';
Chris@12 385
Chris@12 386 $periods = array(
Chris@12 387 array('2017-01-01', 'P1D', '2017-01-03', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-03 00:00:00.0', '1) 2017-01-01%a2) 2017-01-02'),
Chris@12 388 array('2017-01-01', 'P1D', 1, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 2 time/s', '1) 2017-01-01%a2) 2017-01-02'),
Chris@12 389
Chris@12 390 array('2017-01-01', 'P1D', '2017-01-04', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-04 00:00:00.0', '1) 2017-01-01%a2) 2017-01-02%a3) 2017-01-03'),
Chris@12 391 array('2017-01-01', 'P1D', 2, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 3 time/s', '1) 2017-01-01%a2) 2017-01-02%a3) 2017-01-03'),
Chris@12 392
Chris@12 393 array('2017-01-01', 'P1D', '2017-01-05', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-05 00:00:00.0', '1) 2017-01-01%a2) 2017-01-02%a1 more'),
Chris@12 394 array('2017-01-01', 'P1D', 3, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 4 time/s', '1) 2017-01-01%a2) 2017-01-02%a3) 2017-01-03%a1 more'),
Chris@12 395
Chris@12 396 array('2017-01-01', 'P1D', '2017-01-21', 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) to 2017-01-21 00:00:00.0', '1) 2017-01-01%a17 more'),
Chris@12 397 array('2017-01-01', 'P1D', 19, 0, 'every + 1d, from 2017-01-01 00:00:00.0 (included) recurring 20 time/s', '1) 2017-01-01%a17 more'),
Chris@12 398
Chris@12 399 array('2017-01-01 01:00:00', 'P1D', '2017-01-03 01:00:00', 0, 'every + 1d, from 2017-01-01 01:00:00.0 (included) to 2017-01-03 01:00:00.0', '1) 2017-01-01 01:00:00.0%a2) 2017-01-02 01:00:00.0'),
Chris@12 400 array('2017-01-01 01:00:00', 'P1D', 1, 0, 'every + 1d, from 2017-01-01 01:00:00.0 (included) recurring 2 time/s', '1) 2017-01-01 01:00:00.0%a2) 2017-01-02 01:00:00.0'),
Chris@12 401
Chris@12 402 array('2017-01-01', 'P1DT1H', '2017-01-03', 0, "every + 1d 01:00:00$ms, from 2017-01-01 00:00:00.0 (included) to 2017-01-03 00:00:00.0", '1) 2017-01-01 00:00:00.0%a2) 2017-01-02 01:00:00.0'),
Chris@12 403 array('2017-01-01', 'P1DT1H', 1, 0, "every + 1d 01:00:00$ms, from 2017-01-01 00:00:00.0 (included) recurring 2 time/s", '1) 2017-01-01 00:00:00.0%a2) 2017-01-02 01:00:00.0'),
Chris@12 404
Chris@12 405 array('2017-01-01', 'P1D', '2017-01-04', \DatePeriod::EXCLUDE_START_DATE, 'every + 1d, from 2017-01-01 00:00:00.0 (excluded) to 2017-01-04 00:00:00.0', '1) 2017-01-02%a2) 2017-01-03'),
Chris@12 406 array('2017-01-01', 'P1D', 2, \DatePeriod::EXCLUDE_START_DATE, 'every + 1d, from 2017-01-01 00:00:00.0 (excluded) recurring 2 time/s', '1) 2017-01-02%a2) 2017-01-03'),
Chris@12 407 );
Chris@12 408
Chris@12 409 if (\PHP_VERSION_ID < 70107) {
Chris@12 410 array_walk($periods, function (&$i) { $i[5] = ''; });
Chris@12 411 }
Chris@12 412
Chris@12 413 return $periods;
Chris@12 414 }
Chris@12 415
Chris@12 416 private function createInterval($intervalSpec, $ms, $invert)
Chris@12 417 {
Chris@12 418 $interval = new \DateInterval($intervalSpec);
Chris@12 419 if (\PHP_VERSION_ID >= 70100 && isset($interval->f)) {
Chris@12 420 $interval->f = $ms;
Chris@12 421 }
Chris@12 422 $interval->invert = $invert;
Chris@12 423
Chris@12 424 return $interval;
Chris@12 425 }
Chris@12 426 }