Skip to content

Commit e38d300

Browse files
committed
Refactor code to avoid duplication
1 parent 24085d0 commit e38d300

File tree

3 files changed

+17
-14
lines changed

3 files changed

+17
-14
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ PHP NEWS
66
. Fixed bug GH-8289 (Exceptions thrown within a yielded from iterator are
77
not rethrown into the generator). (Bob)
88

9+
- Date:
10+
. Fixed bug GH-7979 (DatePeriod iterator advances when checking if valid).
11+
(Derick, Cody Mann)
12+
913
- FPM:
1014
. Fixed bug #76003 (FPM /status reports wrong number of active processe).
1115
(Jakub Zelenka)

ext/date/php_date.c

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1492,18 +1492,23 @@ static void date_period_it_current_key(zend_object_iterator *iter, zval *key)
14921492
}
14931493
/* }}} */
14941494

1495+
static void date_period_advance(timelib_time *it_time, timelib_rel_time *interval)
1496+
{
1497+
it_time->have_relative = 1;
1498+
it_time->relative = *interval;
1499+
it_time->sse_uptodate = 0;
1500+
timelib_update_ts(it_time, NULL);
1501+
timelib_update_from_sse(it_time);
1502+
}
1503+
14951504
/* {{{ date_period_it_move_forward */
14961505
static void date_period_it_move_forward(zend_object_iterator *iter)
14971506
{
14981507
date_period_it *iterator = (date_period_it *)iter;
14991508
php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data);
15001509
timelib_time *it_time = object->current;
15011510

1502-
it_time->have_relative = 1;
1503-
it_time->relative = *object->interval;
1504-
it_time->sse_uptodate = 0;
1505-
timelib_update_ts(it_time, NULL);
1506-
timelib_update_from_sse(it_time);
1511+
date_period_advance(it_time, object->interval);
15071512

15081513
iterator->current_index++;
15091514
date_period_it_invalidate_current(iter);
@@ -1527,14 +1532,7 @@ static void date_period_it_rewind(zend_object_iterator *iter)
15271532
iterator->object->current = timelib_time_clone(iterator->object->start);
15281533

15291534
if (!iterator->object->include_start_date) {
1530-
timelib_time *it_time = iterator->object->current;
1531-
1532-
it_time->have_relative = 1;
1533-
it_time->relative = *iterator->object->interval;
1534-
it_time->sse_uptodate = 0;
1535-
1536-
timelib_update_ts(it_time, NULL);
1537-
timelib_update_from_sse(it_time);
1535+
date_period_advance(iterator->object->current, iterator->object->interval);
15381536
}
15391537

15401538
date_period_it_invalidate_current(iter);

ext/date/tests/DatePeriod_no_advance_on_valid.phpt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
Date Period iterators do not advance on `valid()`
2+
Date Period iterators do not advance on valid()
33
--FILE--
44
<?php
55

@@ -35,6 +35,7 @@ foreach ($iterator as $item) {
3535
$iterator->valid();
3636
echo $item->format('Y-m-d') . "\n";
3737
}
38+
?>
3839
--EXPECT--
3940
2022-01-01
4041
2022-01-02

0 commit comments

Comments
 (0)