Skip to content

Commit 82ff4c5

Browse files
committed
Make the new DatePeriod::createFromISO8601String method emit DateTimeImmutable objects
1 parent b669cb4 commit 82ff4c5

File tree

3 files changed

+12
-10
lines changed

3 files changed

+12
-10
lines changed

ext/date/php_date.c

+7-5
Original file line numberDiff line numberDiff line change
@@ -4844,7 +4844,8 @@ static bool date_period_initialize(timelib_time **st, timelib_time **et, timelib
48444844
return retval;
48454845
} /* }}} */
48464846

4847-
static bool date_period_init_iso8601_string(php_period_obj *dpobj, char *isostr, size_t isostr_len, zend_long options, zend_long *recurrences) {
4847+
static bool date_period_init_iso8601_string(php_period_obj *dpobj, zend_class_entry* base_ce, char *isostr, size_t isostr_len, zend_long options, zend_long *recurrences)
4848+
{
48484849
if (!date_period_initialize(&(dpobj->start), &(dpobj->end), &(dpobj->interval), recurrences, isostr, isostr_len)) {
48494850
return false;
48504851
}
@@ -4874,12 +4875,13 @@ static bool date_period_init_iso8601_string(php_period_obj *dpobj, char *isostr,
48744875
if (dpobj->end) {
48754876
timelib_update_ts(dpobj->end, NULL);
48764877
}
4877-
dpobj->start_ce = date_ce_date;
4878+
dpobj->start_ce = base_ce;
48784879

48794880
return true;
48804881
}
48814882

4882-
static bool date_period_init_finish(php_period_obj *dpobj, zend_long options, zend_long recurrences) {
4883+
static bool date_period_init_finish(php_period_obj *dpobj, zend_long options, zend_long recurrences)
4884+
{
48834885
if (dpobj->end == NULL && recurrences < 1) {
48844886
zend_string *func = get_active_function_or_method_name();
48854887
zend_throw_exception_ex(date_ce_date_malformed_period_string_exception, 0, "%s(): Recurrence count must be greater than 0", ZSTR_VAL(func));
@@ -4917,7 +4919,7 @@ PHP_METHOD(DatePeriod, createFromISO8601String)
49174919

49184920
dpobj->current = NULL;
49194921

4920-
if (!date_period_init_iso8601_string(dpobj, isostr, isostr_len, options, &recurrences)) {
4922+
if (!date_period_init_iso8601_string(dpobj, date_ce_immutable, isostr, isostr_len, options, &recurrences)) {
49214923
RETURN_THROWS();
49224924
}
49234925

@@ -4950,7 +4952,7 @@ PHP_METHOD(DatePeriod, __construct)
49504952
dpobj->current = NULL;
49514953

49524954
if (isostr) {
4953-
if (!date_period_init_iso8601_string(dpobj, isostr, isostr_len, options, &recurrences)) {
4955+
if (!date_period_init_iso8601_string(dpobj, date_ce_date, isostr, isostr_len, options, &recurrences)) {
49544956
RETURN_THROWS();
49554957
}
49564958
} else {

ext/date/tests/DatePeriod_createFromISO8601String_static_return.phpt

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ try {
2323
--EXPECT--
2424
object(MyDatePeriod)#1 (7) {
2525
["start"]=>
26-
object(DateTime)#2 (3) {
26+
object(DateTimeImmutable)#2 (3) {
2727
["date"]=>
2828
string(26) "2012-07-01 00:00:00.000000"
2929
["timezone_type"]=>

ext/date/tests/DatePeriod_serialize-001.phpt

+4-4
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ var_dump($d->__serialize());
2424
Original object:
2525
object(DatePeriod)#%d (%d) {
2626
["start"]=>
27-
object(DateTime)#%d (%d) {
27+
object(DateTimeImmutable)#%d (%d) {
2828
["date"]=>
2929
string(26) "2012-07-01 00:00:00.000000"
3030
["timezone_type"]=>
@@ -69,13 +69,13 @@ object(DatePeriod)#%d (%d) {
6969

7070

7171
Serialised object:
72-
string(%d) "O:10:"DatePeriod":7:{s:5:"start";O:8:"DateTime":3:{s:4:"date";s:26:"2012-07-01 00:00:00.000000";s:13:"timezone_type";i:1;s:8:"timezone";s:6:"+00:00";}s:7:"current";N;s:3:"end";N;s:8:"interval";O:12:"DateInterval":10:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:7;s:1:"h";i:0;s:1:"i";i:0;s:1:"s";i:0;s:1:"f";d:0;s:6:"invert";i:0;s:4:"days";b:0;s:11:"from_string";b:0;}s:11:"recurrences";i:5;s:18:"include_start_date";b:1;s:16:"include_end_date";b:0;}"
72+
string(%d) "O:10:"DatePeriod":7:{s:5:"start";O:17:"DateTimeImmutable":3:{s:4:"date";s:26:"2012-07-01 00:00:00.000000";s:13:"timezone_type";i:1;s:8:"timezone";s:6:"+00:00";}s:7:"current";N;s:3:"end";N;s:8:"interval";O:12:"DateInterval":10:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:7;s:1:"h";i:0;s:1:"i";i:0;s:1:"s";i:0;s:1:"f";d:0;s:6:"invert";i:0;s:4:"days";b:0;s:11:"from_string";b:0;}s:11:"recurrences";i:5;s:18:"include_start_date";b:1;s:16:"include_end_date";b:0;}"
7373

7474

7575
Unserialised object:
7676
object(DatePeriod)#%d (%d) {
7777
["start"]=>
78-
object(DateTime)#%d (%d) {
78+
object(DateTimeImmutable)#%d (%d) {
7979
["date"]=>
8080
string(26) "2012-07-01 00:00:00.000000"
8181
["timezone_type"]=>
@@ -122,7 +122,7 @@ object(DatePeriod)#%d (%d) {
122122
Calling __serialize manually:
123123
array(%d) {
124124
["start"]=>
125-
object(DateTime)#%d (%d) {
125+
object(DateTimeImmutable)#%d (%d) {
126126
["date"]=>
127127
string(26) "2012-07-01 00:00:00.000000"
128128
["timezone_type"]=>

0 commit comments

Comments
 (0)