Bug #65683 [Opn->Csd]: Intl does not support DateTimeImmutable

[email protected]
Newsgroups php.bugs
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=65683&edit=1

 ID:                 65683
 Updated by:         [email protected]
 Reported by:        poinsot dot julien at gmail dot com
 Summary:            Intl does not support DateTimeImmutable
-Status:             Open
+Status:             Closed
 Type:               Bug
 Package:            Date/time related
 PHP Version:        5.5.3
-Assigned To:        
+Assigned To:        nikic
 Block user comment: N
 Private report:     N

 New Comment:

Fixed by https://github.com/php/php-src/commit/d896878ad592335ee094f531f56673178dc2b301.


Previous Comments:
------------------------------------------------------------------------
[2015-12-17 14:05:21] attila at szeremi dot org

I'm getting the issue that formatting a DateTimeImmutable with IntlDateFormatter results in an empty string.

PHP version used: PHP 5.5.29-1~dotdeb+7.1 (cli)

------------------------------------------------------------------------
[2014-05-19 13:55:28] alan at alanpearce dot co dot uk

DateTimeZone::getOffset also doesn't accept a DateTimeImmutable object.

------------------------------------------------------------------------
[2014-03-28 16:59:59] poinsot dot julien at gmail dot com

The commit you mention seems to allow DateTimeImmutable usage with DatePeriod::__construct but still does not fix intl stuffs.

Test script:
---------------
ini_set('intl.error_level', E_WARNING);
var_dump(
        datefmt_create('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(date_create_immutable('1970-01-01')),
        datefmt_create('fr_FR', IntlDateFormatter::FULL, IntlDateFormatter::FULL)->format(date_create('1970-01-01'))
);

Actual result:
--------------
Warning: IntlDateFormatter::format(): datefmt_format: invalid object type for date/time (only IntlCalendar and DateTime permitted) in %s on line %d
bool(false)
string(39) "jeudi 1 janvier 1970 00:00:00 UTC+01:00"

Expected result:
----------------
string(39) "jeudi 1 janvier 1970 00:00:00 UTC+01:00"
string(39) "jeudi 1 janvier 1970 00:00:00 UTC+01:00"

------------------------------------------------------------------------
[2014-03-27 16:09:27] phofstetter at sensational dot ch

This has been fixed in 5f09944662e09ea0b3f93cfab8702f188955e68c which is in 5.5.9 and later.

------------------------------------------------------------------------
[2013-09-16 17:26:36] poinsot dot julien at gmail dot com

Description:
------------
Actually, DateTimeImmutable is not usable everywhere DateTime is.

Missing support I have found is:
* DatePeriod::__construct where end parameter does not allow a DateTimeImmutable objet as date_ce_date is used instead of date_ce_interface
* intl extension (see grep -rn php_date_get_date_ce ext/intl for complete list) which use the function php_date_get_date_ce (so date_ce_date)

Test script:
---------------
var_dump(datefmt_create('fr_FR')->format(date_create_immutable('1970-01-01')));

$start = new DateTimeImmutable('last monday');
var_dump(new DatePeriod($start, DateInterval::createFromDateString('1 day'), $start->add(DateInterval::createFromDateString('5 days'))));

Expected result:
----------------
string(39) "jeudi 1 janvier 1970 00:00:00 UTC+01:00"

object(DatePeriod)#3 (6) {
...
}

Actual result:
--------------
Warning: IntlDateFormatter::format(): datefmt_format: object must be an instance of DateTime in %s on %d

Fatal error: Uncaught exception 'Exception' with message 'DatePeriod::__construct(): This constructor accepts either (DateTimeInterface, DateInterval, int) OR (DateTimeInterface, DateInterval, DateTime) OR (string) as arguments.' in %s:%d


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=65683&edit=1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.