[PHP-CVS] com php-src: Make DatePeriod support DateTimeImmutable as well.: ext/date/php_date.c ext/date/php_date.h ext/date/tests/date_period-immutable.phpt
Commit:c20911a8501ed2a69c6ce9359e8e50d599f99bba Author:Derick Rethans git...@derickrethans.nl Thu, 20 Dec 2012 13:22:18 + Parents: a0618139c9f7aa7859f338a485af161f672be9cd Branches: PHP-5.5 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=c20911a8501ed2a69c6ce9359e8e50d599f99bba Log: Make DatePeriod support DateTimeImmutable as well. If the start element is a DateTimeImmutable object, then all returned objects are also DateTimeImmutable objects. If the start element is a DateTime object, then all returned objects are DateTime objects. Changed paths: M ext/date/php_date.c M ext/date/php_date.h A ext/date/tests/date_period-immutable.phpt Diff: diff --git a/ext/date/php_date.c b/ext/date/php_date.c index fc281ce..cc83130 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1847,7 +1847,7 @@ static void date_period_it_current_data(zend_object_iterator *iter, zval ***data /* Create new object */ MAKE_STD_ZVAL(iterator-current); - php_date_instantiate(date_ce_date, iterator-current TSRMLS_CC); + php_date_instantiate(object-start_ce, iterator-current TSRMLS_CC); newdateobj = (php_date_obj *) zend_object_store_get_object(iterator-current TSRMLS_CC); newdateobj-time = timelib_time_ctor(); *newdateobj-time = *it_time; @@ -4182,6 +4182,7 @@ PHP_METHOD(DatePeriod, __construct) if (dpobj-end) { timelib_update_ts(dpobj-end, NULL); } + dpobj-start_ce = date_ce_date; } else { /* init */ intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); @@ -4197,6 +4198,7 @@ PHP_METHOD(DatePeriod, __construct) clone-tz_info = dateobj-time-tz_info; } dpobj-start = clone; + dpobj-start_ce = Z_OBJCE_P(start); /* interval */ dpobj-interval = timelib_rel_time_clone(intobj-diff); diff --git a/ext/date/php_date.h b/ext/date/php_date.h index 19c692b..3af3fa4 100644 --- a/ext/date/php_date.h +++ b/ext/date/php_date.h @@ -154,6 +154,7 @@ struct _php_interval_obj { struct _php_period_obj { zend_object std; timelib_time *start; + zend_class_entry *start_ce; timelib_time *current; timelib_time *end; timelib_rel_time *interval; diff --git a/ext/date/tests/date_period-immutable.phpt b/ext/date/tests/date_period-immutable.phpt new file mode 100644 index 000..0ec4b4a --- /dev/null +++ b/ext/date/tests/date_period-immutable.phpt @@ -0,0 +1,56 @@ +--TEST-- +DatePeriod +--FILE-- +?php +date_default_timezone_set('UTC'); +$db1 = new DateTimeImmutable( '2008-01-01' ); +$db2 = new DateTime( '2008-01-01' ); +$de = new DateTime( '2008-03-31' ); +$di = DateInterval::createFromDateString( 'first day of next month' ); + +foreach ( new DatePeriod( $db1, $di, $de ) as $dt ) +{ + echo get_class( $dt ), \n; + echo $dt-format( l Y-m-d\n ); +echo $dt-modify( 3 tuesday )-format( l Y-m-d\n ); + echo $dt-format( l Y-m-d\n\n ); +} + +foreach ( new DatePeriod( $db2, $di, $de ) as $dt ) +{ + echo get_class( $dt ), \n; + echo $dt-format( l Y-m-d\n ); +echo $dt-modify( 3 tuesday )-format( l Y-m-d\n ); + echo $dt-format( l Y-m-d\n\n ); +} +? +--EXPECT-- +DateTimeImmutable +Tuesday 2008-01-01 +Tuesday 2008-01-15 +Tuesday 2008-01-01 + +DateTimeImmutable +Friday 2008-02-01 +Tuesday 2008-02-19 +Friday 2008-02-01 + +DateTimeImmutable +Saturday 2008-03-01 +Tuesday 2008-03-18 +Saturday 2008-03-01 + +DateTime +Tuesday 2008-01-01 +Tuesday 2008-01-15 +Tuesday 2008-01-15 + +DateTime +Friday 2008-02-01 +Tuesday 2008-02-19 +Tuesday 2008-02-19 + +DateTime +Saturday 2008-03-01 +Tuesday 2008-03-18 +Tuesday 2008-03-18 -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: Make DatePeriod support DateTimeImmutable as well.: ext/date/php_date.c ext/date/php_date.h ext/date/tests/date_period-immutable.phpt
Commit:62129f31a758e86f62410262bb6096f1b2584363 Author:Derick Rethans git...@derickrethans.nl Thu, 20 Dec 2012 13:22:18 + Parents: 793b52b576e7af8823ae24622c6a331fd473e149 Branches: immutable-date Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=62129f31a758e86f62410262bb6096f1b2584363 Log: Make DatePeriod support DateTimeImmutable as well. If the start element is a DateTimeImmutable object, then all returned objects are also DateTimeImmutable objects. If the start element is a DateTime object, then all returned objects are DateTime objects. Changed paths: M ext/date/php_date.c M ext/date/php_date.h A ext/date/tests/date_period-immutable.phpt Diff: diff --git a/ext/date/php_date.c b/ext/date/php_date.c index fc281ce..cc83130 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1847,7 +1847,7 @@ static void date_period_it_current_data(zend_object_iterator *iter, zval ***data /* Create new object */ MAKE_STD_ZVAL(iterator-current); - php_date_instantiate(date_ce_date, iterator-current TSRMLS_CC); + php_date_instantiate(object-start_ce, iterator-current TSRMLS_CC); newdateobj = (php_date_obj *) zend_object_store_get_object(iterator-current TSRMLS_CC); newdateobj-time = timelib_time_ctor(); *newdateobj-time = *it_time; @@ -4182,6 +4182,7 @@ PHP_METHOD(DatePeriod, __construct) if (dpobj-end) { timelib_update_ts(dpobj-end, NULL); } + dpobj-start_ce = date_ce_date; } else { /* init */ intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); @@ -4197,6 +4198,7 @@ PHP_METHOD(DatePeriod, __construct) clone-tz_info = dateobj-time-tz_info; } dpobj-start = clone; + dpobj-start_ce = Z_OBJCE_P(start); /* interval */ dpobj-interval = timelib_rel_time_clone(intobj-diff); diff --git a/ext/date/php_date.h b/ext/date/php_date.h index 19c692b..3af3fa4 100644 --- a/ext/date/php_date.h +++ b/ext/date/php_date.h @@ -154,6 +154,7 @@ struct _php_interval_obj { struct _php_period_obj { zend_object std; timelib_time *start; + zend_class_entry *start_ce; timelib_time *current; timelib_time *end; timelib_rel_time *interval; diff --git a/ext/date/tests/date_period-immutable.phpt b/ext/date/tests/date_period-immutable.phpt new file mode 100644 index 000..0ec4b4a --- /dev/null +++ b/ext/date/tests/date_period-immutable.phpt @@ -0,0 +1,56 @@ +--TEST-- +DatePeriod +--FILE-- +?php +date_default_timezone_set('UTC'); +$db1 = new DateTimeImmutable( '2008-01-01' ); +$db2 = new DateTime( '2008-01-01' ); +$de = new DateTime( '2008-03-31' ); +$di = DateInterval::createFromDateString( 'first day of next month' ); + +foreach ( new DatePeriod( $db1, $di, $de ) as $dt ) +{ + echo get_class( $dt ), \n; + echo $dt-format( l Y-m-d\n ); +echo $dt-modify( 3 tuesday )-format( l Y-m-d\n ); + echo $dt-format( l Y-m-d\n\n ); +} + +foreach ( new DatePeriod( $db2, $di, $de ) as $dt ) +{ + echo get_class( $dt ), \n; + echo $dt-format( l Y-m-d\n ); +echo $dt-modify( 3 tuesday )-format( l Y-m-d\n ); + echo $dt-format( l Y-m-d\n\n ); +} +? +--EXPECT-- +DateTimeImmutable +Tuesday 2008-01-01 +Tuesday 2008-01-15 +Tuesday 2008-01-01 + +DateTimeImmutable +Friday 2008-02-01 +Tuesday 2008-02-19 +Friday 2008-02-01 + +DateTimeImmutable +Saturday 2008-03-01 +Tuesday 2008-03-18 +Saturday 2008-03-01 + +DateTime +Tuesday 2008-01-01 +Tuesday 2008-01-15 +Tuesday 2008-01-15 + +DateTime +Friday 2008-02-01 +Tuesday 2008-02-19 +Tuesday 2008-02-19 + +DateTime +Saturday 2008-03-01 +Tuesday 2008-03-18 +Tuesday 2008-03-18 -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: Make DatePeriod support DateTimeImmutable as well.: ext/date/php_date.c ext/date/php_date.h ext/date/tests/date_period-immutable.phpt
Commit:042ddf371e84fbb7ba1326e7bd45888e63fb30ef Author:Derick Rethans git...@derickrethans.nl Thu, 20 Dec 2012 13:22:18 + Parents: b1c68330161f7ccf4fdb4786ac1b0b28778d3f55 Branches: immutable-date Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=042ddf371e84fbb7ba1326e7bd45888e63fb30ef Log: Make DatePeriod support DateTimeImmutable as well. If the start element is a DateTimeImmutable object, then all returned objects are also DateTimeImmutable objects. If the start element is a DateTime object, then all returned objects are DateTime objects. Changed paths: M ext/date/php_date.c M ext/date/php_date.h A ext/date/tests/date_period-immutable.phpt Diff: diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 08a473d..d60cc42 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1820,7 +1820,7 @@ static void date_period_it_current_data(zend_object_iterator *iter, zval ***data /* Create new object */ MAKE_STD_ZVAL(iterator-current); - php_date_instantiate(date_ce_date, iterator-current TSRMLS_CC); + php_date_instantiate(object-start_ce, iterator-current TSRMLS_CC); newdateobj = (php_date_obj *) zend_object_store_get_object(iterator-current TSRMLS_CC); newdateobj-time = timelib_time_ctor(); *newdateobj-time = *it_time; @@ -4151,6 +4151,7 @@ PHP_METHOD(DatePeriod, __construct) if (dpobj-end) { timelib_update_ts(dpobj-end, NULL); } + dpobj-start_ce = date_ce_date; } else { /* init */ intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); @@ -4166,6 +4167,7 @@ PHP_METHOD(DatePeriod, __construct) clone-tz_info = dateobj-time-tz_info; } dpobj-start = clone; + dpobj-start_ce = Z_OBJCE_P(start); /* interval */ dpobj-interval = timelib_rel_time_clone(intobj-diff); diff --git a/ext/date/php_date.h b/ext/date/php_date.h index fb12dbc..8c4ca00 100644 --- a/ext/date/php_date.h +++ b/ext/date/php_date.h @@ -154,6 +154,7 @@ struct _php_interval_obj { struct _php_period_obj { zend_object std; timelib_time *start; + zend_class_entry *start_ce; timelib_time *current; timelib_time *end; timelib_rel_time *interval; diff --git a/ext/date/tests/date_period-immutable.phpt b/ext/date/tests/date_period-immutable.phpt new file mode 100644 index 000..0ec4b4a --- /dev/null +++ b/ext/date/tests/date_period-immutable.phpt @@ -0,0 +1,56 @@ +--TEST-- +DatePeriod +--FILE-- +?php +date_default_timezone_set('UTC'); +$db1 = new DateTimeImmutable( '2008-01-01' ); +$db2 = new DateTime( '2008-01-01' ); +$de = new DateTime( '2008-03-31' ); +$di = DateInterval::createFromDateString( 'first day of next month' ); + +foreach ( new DatePeriod( $db1, $di, $de ) as $dt ) +{ + echo get_class( $dt ), \n; + echo $dt-format( l Y-m-d\n ); +echo $dt-modify( 3 tuesday )-format( l Y-m-d\n ); + echo $dt-format( l Y-m-d\n\n ); +} + +foreach ( new DatePeriod( $db2, $di, $de ) as $dt ) +{ + echo get_class( $dt ), \n; + echo $dt-format( l Y-m-d\n ); +echo $dt-modify( 3 tuesday )-format( l Y-m-d\n ); + echo $dt-format( l Y-m-d\n\n ); +} +? +--EXPECT-- +DateTimeImmutable +Tuesday 2008-01-01 +Tuesday 2008-01-15 +Tuesday 2008-01-01 + +DateTimeImmutable +Friday 2008-02-01 +Tuesday 2008-02-19 +Friday 2008-02-01 + +DateTimeImmutable +Saturday 2008-03-01 +Tuesday 2008-03-18 +Saturday 2008-03-01 + +DateTime +Tuesday 2008-01-01 +Tuesday 2008-01-15 +Tuesday 2008-01-15 + +DateTime +Friday 2008-02-01 +Tuesday 2008-02-19 +Tuesday 2008-02-19 + +DateTime +Saturday 2008-03-01 +Tuesday 2008-03-18 +Tuesday 2008-03-18 -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php