@@ -1451,16 +1451,6 @@ static int date_period_it_has_more(zend_object_iterator *iter)
1451
1451
{
1452
1452
date_period_it * iterator = (date_period_it * )iter ;
1453
1453
php_period_obj * object = Z_PHPPERIOD_P (& iterator -> intern .data );
1454
- timelib_time * it_time = object -> current ;
1455
-
1456
- /* apply modification if it's not the first iteration */
1457
- if (!object -> include_start_date || iterator -> current_index > 0 ) {
1458
- it_time -> have_relative = 1 ;
1459
- it_time -> relative = * object -> interval ;
1460
- it_time -> sse_uptodate = 0 ;
1461
- timelib_update_ts (it_time , NULL );
1462
- timelib_update_from_sse (it_time );
1463
- }
1464
1454
1465
1455
if (object -> end ) {
1466
1456
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)
1502
1492
}
1503
1493
/* }}} */
1504
1494
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
+
1505
1504
/* {{{ date_period_it_move_forward */
1506
1505
static void date_period_it_move_forward (zend_object_iterator * iter )
1507
1506
{
1508
- date_period_it * iterator = (date_period_it * )iter ;
1507
+ date_period_it * iterator = (date_period_it * )iter ;
1508
+ php_period_obj * object = Z_PHPPERIOD_P (& iterator -> intern .data );
1509
+ timelib_time * it_time = object -> current ;
1510
+
1511
+ date_period_advance (it_time , object -> interval );
1509
1512
1510
1513
iterator -> current_index ++ ;
1511
1514
date_period_it_invalidate_current (iter );
@@ -1525,7 +1528,13 @@ static void date_period_it_rewind(zend_object_iterator *iter)
1525
1528
zend_throw_error (NULL , "DatePeriod has not been initialized correctly" );
1526
1529
return ;
1527
1530
}
1531
+
1528
1532
iterator -> object -> current = timelib_time_clone (iterator -> object -> start );
1533
+
1534
+ if (!iterator -> object -> include_start_date ) {
1535
+ date_period_advance (iterator -> object -> current , iterator -> object -> interval );
1536
+ }
1537
+
1529
1538
date_period_it_invalidate_current (iter );
1530
1539
}
1531
1540
/* }}} */
0 commit comments