@@ -1430,6 +1430,7 @@ PHP_FUNCTION(getdate)
1430
1430
#define PHP_DATE_TIMEZONE_PER_COUNTRY 0x1000
1431
1431
1432
1432
#define PHP_DATE_PERIOD_EXCLUDE_START_DATE 0x0001
1433
+ #define PHP_DATE_PERIOD_INCLUDE_END_DATE 0x0002
1433
1434
1434
1435
1435
1436
/* define an overloaded iterator structure */
@@ -1470,7 +1471,11 @@ static int date_period_it_has_more(zend_object_iterator *iter)
1470
1471
php_period_obj * object = Z_PHPPERIOD_P (& iterator -> intern .data );
1471
1472
1472
1473
if (object -> end ) {
1473
- return object -> current -> sse < object -> end -> sse ? SUCCESS : FAILURE ;
1474
+ if (object -> include_end_date ) {
1475
+ return object -> current -> sse <= object -> end -> sse ? SUCCESS : FAILURE ;
1476
+ } else {
1477
+ return object -> current -> sse < object -> end -> sse ? SUCCESS : FAILURE ;
1478
+ }
1474
1479
} else {
1475
1480
return (iterator -> current_index < object -> recurrences ) ? SUCCESS : FAILURE ;
1476
1481
}
@@ -1734,6 +1739,7 @@ static void date_register_classes(void) /* {{{ */
1734
1739
zend_declare_class_constant_long(date_ce_period, const_name, sizeof(const_name)-1, value);
1735
1740
1736
1741
REGISTER_PERIOD_CLASS_CONST_STRING ("EXCLUDE_START_DATE" , PHP_DATE_PERIOD_EXCLUDE_START_DATE );
1742
+ REGISTER_PERIOD_CLASS_CONST_STRING ("INCLUDE_END_DATE" , PHP_DATE_PERIOD_INCLUDE_END_DATE );
1737
1743
} /* }}} */
1738
1744
1739
1745
static zend_object * date_object_new_date (zend_class_entry * class_type ) /* {{{ */
@@ -4567,9 +4573,10 @@ PHP_METHOD(DatePeriod, __construct)
4567
4573
4568
4574
/* options */
4569
4575
dpobj -> include_start_date = !(options & PHP_DATE_PERIOD_EXCLUDE_START_DATE );
4576
+ dpobj -> include_end_date = options & PHP_DATE_PERIOD_INCLUDE_END_DATE ;
4570
4577
4571
4578
/* recurrrences */
4572
- dpobj -> recurrences = recurrences + dpobj -> include_start_date ;
4579
+ dpobj -> recurrences = recurrences + dpobj -> include_start_date + dpobj -> include_end_date ;
4573
4580
4574
4581
dpobj -> initialized = 1 ;
4575
4582
}
0 commit comments