From 35f5b552eac3f4747f0d8090146557dd16566e08 Mon Sep 17 00:00:00 2001 From: SebastianKrupinski Date: Wed, 19 Nov 2025 19:19:32 -0500 Subject: [PATCH] fix: use RDATE in time range check and use all instances Signed-off-by: SebastianKrupinski --- lib/Component/VEvent.php | 2 +- lib/Recur/EventIterator.php | 6 ++++- tests/VObject/Component/VEventTest.php | 35 ++++++++++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/lib/Component/VEvent.php b/lib/Component/VEvent.php index 6ea93ed5e..a385a09e1 100644 --- a/lib/Component/VEvent.php +++ b/lib/Component/VEvent.php @@ -29,7 +29,7 @@ class VEvent extends VObject\Component */ public function isInTimeRange(DateTimeInterface $start, DateTimeInterface $end) { - if ($this->RRULE) { + if ($this->RRULE || $this->RDATE) { try { $it = new EventIterator($this, null, $start->getTimezone()); } catch (NoInstancesException $e) { diff --git a/lib/Recur/EventIterator.php b/lib/Recur/EventIterator.php index 55d6e4779..212c147d5 100644 --- a/lib/Recur/EventIterator.php +++ b/lib/Recur/EventIterator.php @@ -168,8 +168,12 @@ public function __construct($input, $uid = null, ?DateTimeZone $timeZone = null) } if (isset($this->masterEvent->RDATE)) { + $rdateValues = []; + foreach ($this->masterEvent->RDATE as $rdate) { + $rdateValues = array_merge($rdateValues, $rdate->getParts()); + } $this->recurIterator = new RDateIterator( - $this->masterEvent->RDATE->getParts(), + $rdateValues, $this->startDate ); } elseif (isset($this->masterEvent->RRULE)) {