From 3fdafe7cb2d7df722910d1861127ec2180cb9ac7 Mon Sep 17 00:00:00 2001 From: Corey Taylor Date: Wed, 18 Jun 2025 22:32:06 -0500 Subject: [PATCH] Add ChronosDatePeriod --- phpstan.neon | 4 ++ src/ChronosDatePeriod.php | 83 ++++++++++++++++++++++++ tests/TestCase/ChronosDatePeriodTest.php | 40 ++++++++++++ 3 files changed, 127 insertions(+) create mode 100644 src/ChronosDatePeriod.php create mode 100644 tests/TestCase/ChronosDatePeriodTest.php diff --git a/phpstan.neon b/phpstan.neon index 4dcb07f0..d956d484 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -17,3 +17,7 @@ parameters: message: "#with generic class DatePeriod but does not specify its types: TDate, TEnd, TRecurrences$#" count: 1 path: src/ChronosPeriod.php + - + message: "#with generic class DatePeriod but does not specify its types: TDate, TEnd, TRecurrences$#" + count: 1 + path: src/ChronosDatePeriod.php diff --git a/src/ChronosDatePeriod.php b/src/ChronosDatePeriod.php new file mode 100644 index 00000000..fb4e8b73 --- /dev/null +++ b/src/ChronosDatePeriod.php @@ -0,0 +1,83 @@ + + */ +class ChronosDatePeriod implements Iterator +{ + /** + * @var \Iterator + */ + protected Iterator $iterator; + + /** + * @param \DatePeriod $period + */ + public function __construct(DatePeriod $period) + { + /** @var \Iterator $iterator */ + $iterator = $period->getIterator(); + $this->iterator = $iterator; + } + + /** + * @return \Cake\Chronos\ChronosDate + */ + public function current(): ChronosDate + { + return new ChronosDate($this->iterator->current()); + } + + /** + * @return int + */ + public function key(): int + { + return $this->iterator->key(); + } + + /** + * @return void + */ + public function next(): void + { + $this->iterator->next(); + } + + /** + * @return void + */ + public function rewind(): void + { + $this->iterator->rewind(); + } + + /** + * @return bool + */ + public function valid(): bool + { + return $this->iterator->valid(); + } +} diff --git a/tests/TestCase/ChronosDatePeriodTest.php b/tests/TestCase/ChronosDatePeriodTest.php new file mode 100644 index 00000000..4f88e4de --- /dev/null +++ b/tests/TestCase/ChronosDatePeriodTest.php @@ -0,0 +1,40 @@ + $value) { + $output[$key] = $value; + } + $this->assertCount(4, $output); + $this->assertInstanceOf(ChronosDAte::class, $output[0]); + $this->assertSame('2025-01-01 00:00:00', $output[0]->format('Y-m-d H:i:s')); + $this->assertInstanceOf(ChronosDate::class, $output[1]); + $this->assertSame('2025-01-02 00:00:00', $output[1]->format('Y-m-d H:i:s')); + $this->assertInstanceOf(ChronosDate::class, $output[3]); + $this->assertSame('2025-01-04 00:00:00', $output[3]->format('Y-m-d H:i:s')); + } +}