]> granicus.if.org Git - php/commitdiff
Fixed bug #75113: Added DatePeriod::getRecurrences() method.
authorIgnace Nyamagana Butera <nyamsprod@gmail.com>
Tue, 26 Feb 2019 20:21:46 +0000 (21:21 +0100)
committerDerick Rethans <github@derickrethans.nl>
Sun, 17 Mar 2019 18:37:35 +0000 (14:37 -0400)
NEWS
ext/date/php_date.c
ext/date/php_date.h
ext/date/tests/DatePeriod_getter.phpt

diff --git a/NEWS b/NEWS
index ad1b28ae22751789932a8f6c4e59be7488f8cdcc..88f91cfe730626ae31358db018792d93355f0107 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -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).
index 5cc3f794cdf03bffaa42a85337b7571fd002c66c..f6f0c6468a4097772c947ea3120de6979151e0a4 100644 (file)
@@ -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
 };
 
@@ -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;
index 56837705b2d396767581e550e21edfc22876dcb0..8abfa5f464c5089a3593b8b39b14e79c6410782a 100644 (file)
@@ -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);
index 22006d1ae83e9b11e83a5145155797cc57345378..58f93b7cdd12098f191ec16029d10d2d675ab63c 100644 (file)
@@ -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());
@@ -16,6 +17,17 @@ 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"
@@ -23,3 +35,7 @@ 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)