diff options
author | Stanislav Malyshev <stas@php.net> | 2015-03-22 20:57:46 -0700 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2015-03-22 21:03:46 -0700 |
commit | aa22e80b1af500e5d6cdc0f7783537a768d0e373 (patch) | |
tree | 35fc7323b84db4c55485065806bbde8984688461 | |
parent | 3e7f47cb039fd8803776eaf2899d576c503cdb63 (diff) | |
parent | c2e22556ba070fc032572384e152d9eda631c34e (diff) | |
download | php-git-aa22e80b1af500e5d6cdc0f7783537a768d0e373.tar.gz |
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5:
Adding a new `createFromImmutable` method to the `DateTime` class to mirror the current `DateTime::createFromMutable()`
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | UPGRADING | 1 | ||||
-rw-r--r-- | ext/date/php_date.c | 35 | ||||
-rw-r--r-- | ext/date/php_date.h | 1 | ||||
-rw-r--r-- | ext/date/tests/DateTime_createFromImmutable.phpt | 26 | ||||
-rw-r--r-- | ext/date/tests/DateTime_verify.phpt | 37 |
6 files changed, 87 insertions, 16 deletions
@@ -19,6 +19,9 @@ PHP NEWS - Curl: . Implemented FR#69278 (HTTP2 support). (Masaki Kagaya) +- Date: + . Added DateTime::createFromImmutable(). (Trevor Suarez) + - Enchant: . Fixed bug #65406 (Enchant broker plugins are in the wrong place in windows builds). (Anatol) @@ -271,6 +271,7 @@ PHP 5.6 UPGRADE NOTES - Datetime: Added DatePeriod::getStartDate(), DatePeriod::getEndDate(), DatePeriod::getDateInterval() in 5.6.5. + Added DateTime::createFromImmutable() in 5.6.8. - GMP: Added gmp_root($a, $nth) and gmp_rootrem($a, $nth) for calculating nth roots. diff --git a/ext/date/php_date.c b/ext/date/php_date.c index c4495f4ae9..851e9f7185 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -185,6 +185,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_date_format, 0, 0, 2) ZEND_ARG_INFO(0, format) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_create_from_immutable, 0, 0, 1) + ZEND_ARG_INFO(0, DateTimeImmutable) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_format, 0, 0, 1) ZEND_ARG_INFO(0, format) ZEND_END_ARG_INFO() @@ -468,6 +472,7 @@ const zend_function_entry date_funcs_date[] = { PHP_ME(DateTime, __construct, arginfo_date_create, ZEND_ACC_CTOR|ZEND_ACC_PUBLIC) PHP_ME(DateTime, __wakeup, NULL, ZEND_ACC_PUBLIC) PHP_ME(DateTime, __set_state, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) + PHP_ME(DateTime, createFromImmutable, arginfo_date_method_create_from_immutable, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(createFromFormat, date_create_from_format, arginfo_date_create_from_format, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(getLastErrors, date_get_last_errors, arginfo_date_get_last_errors, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_ME_MAPPING(format, date_format, arginfo_date_method_format, 0) @@ -2781,7 +2786,7 @@ PHP_METHOD(DateTimeImmutable, createFromMutable) php_date_obj *new_obj = NULL; php_date_obj *old_obj = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O!", &datetime_object, date_ce_date) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &datetime_object, date_ce_date) == FAILURE) { return; } @@ -2912,6 +2917,34 @@ PHP_METHOD(DateTime, __wakeup) } /* }}} */ +/* {{{ proto DateTime::createFromImmutable(DateTimeImmutable object) + Creates new DateTime object from an existing DateTimeImmutable object. +*/ +PHP_METHOD(DateTime, createFromImmutable) +{ + zval *datetimeimmutable_object = NULL; + php_date_obj *new_obj = NULL; + php_date_obj *old_obj = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &datetimeimmutable_object, date_ce_immutable) == FAILURE) { + return; + } + + php_date_instantiate(date_ce_date, return_value TSRMLS_CC); + old_obj = (php_date_obj *) zend_object_store_get_object(datetimeimmutable_object TSRMLS_CC); + new_obj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC); + + new_obj->time = timelib_time_ctor(); + *new_obj->time = *old_obj->time; + if (old_obj->time->tz_abbr) { + new_obj->time->tz_abbr = strdup(old_obj->time->tz_abbr); + } + if (old_obj->time->tz_info) { + new_obj->time->tz_info = old_obj->time->tz_info; + } +} +/* }}} */ + /* Helper function used to add an associative array of warnings and errors to a zval */ static void zval_from_error_container(zval *z, timelib_error_container *error) { diff --git a/ext/date/php_date.h b/ext/date/php_date.h index a3deeb2a41..7f46693466 100644 --- a/ext/date/php_date.h +++ b/ext/date/php_date.h @@ -50,6 +50,7 @@ PHP_FUNCTION(getdate); PHP_METHOD(DateTime, __construct); PHP_METHOD(DateTime, __wakeup); PHP_METHOD(DateTime, __set_state); +PHP_METHOD(DateTime, createFromImmutable); PHP_FUNCTION(date_create); PHP_FUNCTION(date_create_immutable); PHP_FUNCTION(date_create_from_format); diff --git a/ext/date/tests/DateTime_createFromImmutable.phpt b/ext/date/tests/DateTime_createFromImmutable.phpt new file mode 100644 index 0000000000..bfde94d825 --- /dev/null +++ b/ext/date/tests/DateTime_createFromImmutable.phpt @@ -0,0 +1,26 @@ +--TEST-- +Tests for DateTime::createFromImmutable. +--INI-- +date.timezone=America/New_York +--FILE-- +<?php +$current = "2015-03-05 07:00:16"; + +$i = DateTime::createFromImmutable(date_create_immutable($current)); +var_dump($i); + +$i = DateTime::createFromImmutable(date_create($current)); +var_dump($i); +?> +--EXPECTF-- +object(DateTime)#%d (3) { + ["date"]=> + string(26) "2015-03-05 07:00:16.000000" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(16) "America/New_York" +} + +Warning: DateTime::createFromImmutable() expects parameter 1 to be DateTimeImmutable, object given in %stests%eDateTime_createFromImmutable.php on line %d +NULL diff --git a/ext/date/tests/DateTime_verify.phpt b/ext/date/tests/DateTime_verify.phpt index c790974729..aa13494d25 100644 --- a/ext/date/tests/DateTime_verify.phpt +++ b/ext/date/tests/DateTime_verify.phpt @@ -27,7 +27,7 @@ object(ReflectionClass)#%d (1) { string(8) "DateTime" } ..and get names of all its methods -array(18) { +array(19) { [0]=> &object(ReflectionMethod)#%d (2) { ["name"]=> @@ -52,104 +52,111 @@ array(18) { [3]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(16) "createFromFormat" + string(19) "createFromImmutable" ["class"]=> string(8) "DateTime" } [4]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(13) "getLastErrors" + string(16) "createFromFormat" ["class"]=> string(8) "DateTime" } [5]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(6) "format" + string(13) "getLastErrors" ["class"]=> string(8) "DateTime" } [6]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(6) "modify" + string(6) "format" ["class"]=> string(8) "DateTime" } [7]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(3) "add" + string(6) "modify" ["class"]=> string(8) "DateTime" } [8]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(3) "sub" + string(3) "add" ["class"]=> string(8) "DateTime" } [9]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(11) "getTimezone" + string(3) "sub" ["class"]=> string(8) "DateTime" } [10]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(11) "setTimezone" + string(11) "getTimezone" ["class"]=> string(8) "DateTime" } [11]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(9) "getOffset" + string(11) "setTimezone" ["class"]=> string(8) "DateTime" } [12]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(7) "setTime" + string(9) "getOffset" ["class"]=> string(8) "DateTime" } [13]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(7) "setDate" + string(7) "setTime" ["class"]=> string(8) "DateTime" } [14]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(10) "setISODate" + string(7) "setDate" ["class"]=> string(8) "DateTime" } [15]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(12) "setTimestamp" + string(10) "setISODate" ["class"]=> string(8) "DateTime" } [16]=> &object(ReflectionMethod)#%d (2) { ["name"]=> - string(12) "getTimestamp" + string(12) "setTimestamp" ["class"]=> string(8) "DateTime" } [17]=> &object(ReflectionMethod)#%d (2) { ["name"]=> + string(12) "getTimestamp" + ["class"]=> + string(8) "DateTime" + } + [18]=> + &object(ReflectionMethod)#%d (2) { + ["name"]=> string(4) "diff" ["class"]=> string(8) "DateTime" |