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.