mirror of
https://github.com/php/php-src.git
synced 2025-08-16 14:08:47 +02:00
Merge branch 'PHP-8.0' into PHP-8.1
This commit is contained in:
commit
ec0771c03f
2 changed files with 72 additions and 11 deletions
|
@ -1451,16 +1451,6 @@ static int date_period_it_has_more(zend_object_iterator *iter)
|
||||||
{
|
{
|
||||||
date_period_it *iterator = (date_period_it *)iter;
|
date_period_it *iterator = (date_period_it *)iter;
|
||||||
php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data);
|
php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data);
|
||||||
timelib_time *it_time = object->current;
|
|
||||||
|
|
||||||
/* apply modification if it's not the first iteration */
|
|
||||||
if (!object->include_start_date || iterator->current_index > 0) {
|
|
||||||
it_time->have_relative = 1;
|
|
||||||
it_time->relative = *object->interval;
|
|
||||||
it_time->sse_uptodate = 0;
|
|
||||||
timelib_update_ts(it_time, NULL);
|
|
||||||
timelib_update_from_sse(it_time);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (object->end) {
|
if (object->end) {
|
||||||
return object->current->sse < object->end->sse ? SUCCESS : FAILURE;
|
return object->current->sse < object->end->sse ? SUCCESS : FAILURE;
|
||||||
|
@ -1502,10 +1492,23 @@ static void date_period_it_current_key(zend_object_iterator *iter, zval *key)
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
static void date_period_advance(timelib_time *it_time, timelib_rel_time *interval)
|
||||||
|
{
|
||||||
|
it_time->have_relative = 1;
|
||||||
|
it_time->relative = *interval;
|
||||||
|
it_time->sse_uptodate = 0;
|
||||||
|
timelib_update_ts(it_time, NULL);
|
||||||
|
timelib_update_from_sse(it_time);
|
||||||
|
}
|
||||||
|
|
||||||
/* {{{ date_period_it_move_forward */
|
/* {{{ date_period_it_move_forward */
|
||||||
static void date_period_it_move_forward(zend_object_iterator *iter)
|
static void date_period_it_move_forward(zend_object_iterator *iter)
|
||||||
{
|
{
|
||||||
date_period_it *iterator = (date_period_it *)iter;
|
date_period_it *iterator = (date_period_it *)iter;
|
||||||
|
php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data);
|
||||||
|
timelib_time *it_time = object->current;
|
||||||
|
|
||||||
|
date_period_advance(it_time, object->interval);
|
||||||
|
|
||||||
iterator->current_index++;
|
iterator->current_index++;
|
||||||
date_period_it_invalidate_current(iter);
|
date_period_it_invalidate_current(iter);
|
||||||
|
@ -1525,7 +1528,13 @@ static void date_period_it_rewind(zend_object_iterator *iter)
|
||||||
zend_throw_error(NULL, "DatePeriod has not been initialized correctly");
|
zend_throw_error(NULL, "DatePeriod has not been initialized correctly");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
iterator->object->current = timelib_time_clone(iterator->object->start);
|
iterator->object->current = timelib_time_clone(iterator->object->start);
|
||||||
|
|
||||||
|
if (!iterator->object->include_start_date) {
|
||||||
|
date_period_advance(iterator->object->current, iterator->object->interval);
|
||||||
|
}
|
||||||
|
|
||||||
date_period_it_invalidate_current(iter);
|
date_period_it_invalidate_current(iter);
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
52
ext/date/tests/DatePeriod_no_advance_on_valid.phpt
Normal file
52
ext/date/tests/DatePeriod_no_advance_on_valid.phpt
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
--TEST--
|
||||||
|
Date Period iterators do not advance on valid()
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$start = DateTime::createFromFormat('Y-m-d', '2022-01-01');
|
||||||
|
$end = DateTime::createFromFormat('Y-m-d', '2022-01-04');
|
||||||
|
$interval = DateInterval::createFromDateString('1 day');
|
||||||
|
$period = new DatePeriod($start, $interval, $end);
|
||||||
|
$iterator = $period->getIterator();
|
||||||
|
|
||||||
|
foreach ($iterator as $item) {
|
||||||
|
echo $item->format('Y-m-d') . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "---------STEP 2\n";
|
||||||
|
|
||||||
|
foreach ($iterator as $item) {
|
||||||
|
$iterator->valid();
|
||||||
|
echo $item->format('Y-m-d') . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$period = new DatePeriod($start, $interval, $end, DatePeriod::EXCLUDE_START_DATE);
|
||||||
|
$iterator = $period->getIterator();
|
||||||
|
|
||||||
|
echo "---------STEP 3\n";
|
||||||
|
|
||||||
|
foreach ($iterator as $item) {
|
||||||
|
echo $item->format('Y-m-d') . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "---------STEP 4\n";
|
||||||
|
|
||||||
|
foreach ($iterator as $item) {
|
||||||
|
$iterator->valid();
|
||||||
|
echo $item->format('Y-m-d') . "\n";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
2022-01-01
|
||||||
|
2022-01-02
|
||||||
|
2022-01-03
|
||||||
|
---------STEP 2
|
||||||
|
2022-01-01
|
||||||
|
2022-01-02
|
||||||
|
2022-01-03
|
||||||
|
---------STEP 3
|
||||||
|
2022-01-02
|
||||||
|
2022-01-03
|
||||||
|
---------STEP 4
|
||||||
|
2022-01-02
|
||||||
|
2022-01-03
|
Loading…
Add table
Add a link
Reference in a new issue