-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Add methods DateTime::createFrom and DateTimeImmutable::createFrom #3394
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
d6f10f6
22f93cc
43c635d
3e695a3
229866e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -319,6 +319,10 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_create_from_mutable, 0, 0, 1) | |
ZEND_ARG_INFO(0, DateTime) | ||
ZEND_END_ARG_INFO() | ||
|
||
ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_create_from, 0, 0, 1) | ||
ZEND_ARG_INFO(0, DateTimeInterface) | ||
ZEND_END_ARG_INFO() | ||
|
||
ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_open, 0, 0, 1) | ||
ZEND_ARG_INFO(0, timezone) | ||
ZEND_END_ARG_INFO() | ||
|
@@ -483,6 +487,7 @@ static const zend_function_entry date_funcs_date[] = { | |
PHP_ME(DateTime, __wakeup, NULL, ZEND_ACC_PUBLIC) | ||
PHP_ME(DateTime, __set_state, arginfo_date_set_state, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) | ||
PHP_ME(DateTime, createFromImmutable, arginfo_date_method_create_from_immutable, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) | ||
PHP_ME(DateTime, createFrom, arginfo_date_method_create_from, 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) | ||
|
@@ -521,6 +526,7 @@ static const zend_function_entry date_funcs_immutable[] = { | |
PHP_ME(DateTimeImmutable, setISODate, arginfo_date_method_isodate_set, 0) | ||
PHP_ME(DateTimeImmutable, setTimestamp, arginfo_date_method_timestamp_set, 0) | ||
PHP_ME(DateTimeImmutable, createFromMutable, arginfo_date_method_create_from_mutable, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) | ||
PHP_ME(DateTimeImmutable, createFrom , arginfo_date_method_create_from, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) | ||
PHP_FE_END | ||
}; | ||
|
||
|
@@ -2901,6 +2907,47 @@ PHP_METHOD(DateTimeImmutable, createFromMutable) | |
new_obj->time = timelib_time_clone(old_obj->time); | ||
} | ||
/* }}} */ | ||
/* {{{ proto DateTime::createFrom(DateTimeInterface object) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add an empty line in between methods please. |
||
Creates new DateTime object from an existing DateTimeInterface object. | ||
*/ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The closing |
||
PHP_METHOD(DateTime, createFrom) | ||
{ | ||
zval *datetime_object = NULL; | ||
php_date_obj *new_obj = NULL; | ||
php_date_obj *old_obj = NULL; | ||
|
||
ZEND_PARSE_PARAMETERS_START(1, 1) | ||
Z_PARAM_OBJECT_OF_CLASS(datetime_object, date_ce_interface) | ||
ZEND_PARSE_PARAMETERS_END(); | ||
|
||
php_date_instantiate(date_ce_date, return_value); | ||
old_obj = Z_PHPDATE_P(datetime_object); | ||
new_obj = Z_PHPDATE_P(return_value); | ||
|
||
new_obj->time = timelib_time_clone(old_obj->time); | ||
} | ||
/* }}} */ | ||
|
||
/* {{{ proto DateTimeImmutable::createFrom(DateTimeInterface object) | ||
Creates new DateTimeImmutable object from an existing DateTimeInterface object. | ||
*/ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The closing |
||
PHP_METHOD(DateTimeImmutable, createFrom) | ||
{ | ||
zval *datetime_object = NULL; | ||
php_date_obj *new_obj = NULL; | ||
php_date_obj *old_obj = NULL; | ||
|
||
ZEND_PARSE_PARAMETERS_START(1, 1) | ||
Z_PARAM_OBJECT_OF_CLASS(datetime_object, date_ce_interface) | ||
ZEND_PARSE_PARAMETERS_END(); | ||
|
||
php_date_instantiate(date_ce_immutable, return_value); | ||
old_obj = Z_PHPDATE_P(datetime_object); | ||
new_obj = Z_PHPDATE_P(return_value); | ||
|
||
new_obj->time = timelib_time_clone(old_obj->time); | ||
} | ||
/* }}} */ | ||
|
||
static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht) | ||
{ | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
--TEST-- | ||
Tests for DateTimeImmutable::createFrom | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "Test" |
||
--INI-- | ||
date.timezone=Europe/London | ||
--FILE-- | ||
<?php | ||
$current = "2014-03-02 16:24:08"; | ||
|
||
$i = DateTimeImmutable::createFrom( date_create( $current ) ); | ||
var_dump( $i ); | ||
|
||
$i = DateTimeImmutable::createFrom( date_create_immutable( $current ) ); | ||
var_dump( $i ); | ||
?> | ||
--EXPECTF-- | ||
object(DateTimeImmutable)#%d (3) { | ||
["date"]=> | ||
string(26) "2014-03-02 16:24:08.000000" | ||
["timezone_type"]=> | ||
int(3) | ||
["timezone"]=> | ||
string(13) "Europe/London" | ||
} | ||
object(DateTimeImmutable)#%d (3) { | ||
["date"]=> | ||
string(26) "2014-03-02 16:24:08.000000" | ||
["timezone_type"]=> | ||
int(3) | ||
["timezone"]=> | ||
string(13) "Europe/London" | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
--TEST-- | ||
Tests for DateTime::createFrom | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "Test" |
||
--INI-- | ||
date.timezone=Europe/London | ||
--FILE-- | ||
<?php | ||
$current = "2014-03-02 16:24:08"; | ||
|
||
$i = DateTime::createFrom( date_create( $current ) ); | ||
var_dump( $i ); | ||
|
||
$i = DateTime::createFrom( date_create_immutable( $current ) ); | ||
var_dump( $i ); | ||
?> | ||
--EXPECTF-- | ||
object(DateTime)#%d (3) { | ||
["date"]=> | ||
string(26) "2014-03-02 16:24:08.000000" | ||
["timezone_type"]=> | ||
int(3) | ||
["timezone"]=> | ||
string(13) "Europe/London" | ||
} | ||
object(DateTime)#%d (3) { | ||
["date"]=> | ||
string(26) "2014-03-02 16:24:08.000000" | ||
["timezone_type"]=> | ||
int(3) | ||
["timezone"]=> | ||
string(13) "Europe/London" | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -32,7 +32,7 @@ object(ReflectionClass)#%d (1) { | |
string(8) "DateTime" | ||
} | ||
..and get names of all its methods | ||
array(19) { | ||
array(20) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ugh, I hate this test. It adds nothing. I'd delete it. |
||
[0]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
|
@@ -64,102 +64,109 @@ array(19) { | |
[4]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(16) "createFromFormat" | ||
string(10) "createFrom" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[5]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(13) "getLastErrors" | ||
string(16) "createFromFormat" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[6]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(6) "format" | ||
string(13) "getLastErrors" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[7]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(6) "modify" | ||
string(6) "format" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[8]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(3) "add" | ||
string(6) "modify" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[9]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(3) "sub" | ||
string(3) "add" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[10]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(11) "getTimezone" | ||
string(3) "sub" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[11]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(11) "setTimezone" | ||
string(11) "getTimezone" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[12]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(9) "getOffset" | ||
string(11) "setTimezone" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[13]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(7) "setTime" | ||
string(9) "getOffset" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[14]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(7) "setDate" | ||
string(7) "setTime" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[15]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(10) "setISODate" | ||
string(7) "setDate" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[16]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(12) "setTimestamp" | ||
string(10) "setISODate" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[17]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(12) "getTimestamp" | ||
string(12) "setTimestamp" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[18]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(12) "getTimestamp" | ||
["class"]=> | ||
string(8) "DateTime" | ||
} | ||
[19]=> | ||
object(ReflectionMethod)#%d (2) { | ||
["name"]=> | ||
string(4) "diff" | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The comma needs to go immediately after
createFrom
.