Skip to content

Commit

Permalink
Fixed bug #75113: Added DatePeriod::getRecurrences() method.
Browse files Browse the repository at this point in the history
  • Loading branch information
nyamsprod authored and derickr committed Mar 17, 2019
1 parent f167b06 commit 6eb83a6
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 4 deletions.
10 changes: 6 additions & 4 deletions NEWS
Expand Up @@ -15,13 +15,15 @@ PHP NEWS
. Fixed bug #77742 (bcpow() implementation related to gcc compiler
optimization). (Nikita)

- FPM:
. Fixed bug #77677 (FPM fails to build on AIX due to missing WCOREDUMP).
(Kevin Adler)

- Date:
. Fixed bug #50020 (DateInterval:createDateFromString() silently fails).
(Derick)
. Fixed bug #75113 (Added DatePeriod::getRecurrences() method). (Ignace
Nyamagana Butera)

- FPM:
. Fixed bug #77677 (FPM fails to build on AIX due to missing WCOREDUMP).
(Kevin Adler)

- GD:
. Fixed bug #77700 (Writing truecolor images as GIF ignores interlace flag).
Expand Down
23 changes: 23 additions & 0 deletions ext/date/php_date.c
Expand Up @@ -543,6 +543,7 @@ const zend_function_entry date_funcs_period[] = {
PHP_ME(DatePeriod, getStartDate, NULL, ZEND_ACC_PUBLIC)
PHP_ME(DatePeriod, getEndDate, NULL, ZEND_ACC_PUBLIC)
PHP_ME(DatePeriod, getDateInterval, NULL, ZEND_ACC_PUBLIC)
PHP_ME(DatePeriod, getRecurrences, NULL, ZEND_ACC_PUBLIC)
PHP_FE_END
};

Expand Down Expand Up @@ -4736,6 +4737,28 @@ PHP_METHOD(DatePeriod, getDateInterval)
}
/* }}} */

/* {{{ proto int DatePeriod::getRecurrences()
Get recurrences.
*/
PHP_METHOD(DatePeriod, getRecurrences)
{
php_period_obj *dpobj;
php_date_obj *dateobj;

if (zend_parse_parameters_none() == FAILURE) {
return;
}

dpobj = Z_PHPPERIOD_P(ZEND_THIS);

if (0 == dpobj->recurrences - dpobj->include_start_date) {
return;
}

RETURN_LONG(dpobj->recurrences - dpobj->include_start_date);
}
/* }}} */

static int check_id_allowed(char *id, zend_long what) /* {{{ */
{
if (what & PHP_DATE_TIMEZONE_GROUP_AFRICA && strncasecmp(id, "Africa/", 7) == 0) return 1;
Expand Down
1 change: 1 addition & 0 deletions ext/date/php_date.h
Expand Up @@ -112,6 +112,7 @@ PHP_METHOD(DatePeriod, __set_state);
PHP_METHOD(DatePeriod, getStartDate);
PHP_METHOD(DatePeriod, getEndDate);
PHP_METHOD(DatePeriod, getDateInterval);
PHP_METHOD(DatePeriod, getRecurrences);

/* Options and Configuration */
PHP_FUNCTION(date_default_timezone_set);
Expand Down
16 changes: 16 additions & 0 deletions ext/date/tests/DatePeriod_getter.phpt
Expand Up @@ -8,6 +8,7 @@ $start = new DateTime('2000-01-01 00:00:00', new DateTimeZone('Europe/Berlin'));
$end = new DateTime('2000-01-31 00:00:00', new DateTimeZone('UTC'));
$interval = new DateInterval('P1D');
$period = new DatePeriod($start, $interval, $end);
$recurrences = 4;

var_dump($period->getStartDate()->format('Y-m-d H:i:s'));
var_dump($period->getStartDate()->getTimeZone()->getName());
Expand All @@ -16,10 +17,25 @@ var_dump($period->getEndDate()->format('Y-m-d H:i:s'));
var_dump($period->getEndDate()->getTimeZone()->getName());

var_dump($period->getDateInterval()->format('%R%y-%m-%d-%h-%i-%s'));
var_dump($period->getRecurrences());

$periodWithRecurrences = new DatePeriod($start, $interval, $recurrences);

var_dump($periodWithRecurrences->getRecurrences());
var_dump($periodWithRecurrences->getEndDate());

$periodWithRecurrencesWithoutStart = new DatePeriod($start, $interval, $recurrences, DatePeriod::EXCLUDE_START_DATE);

var_dump($periodWithRecurrences->getRecurrences());

?>
--EXPECTF--
string(19) "2000-01-01 00:00:00"
string(13) "Europe/Berlin"
string(19) "2000-01-31 00:00:00"
string(3) "UTC"
string(12) "+0-0-1-0-0-0"
NULL
int(4)
NULL
int(4)

0 comments on commit 6eb83a6

Please sign in to comment.