Bug #65683 [Opn->Csd]: Intl does not support DateTimeImmutable
| From: | nikic@php.net | Date: | Tue, 28 Mar 2017 22:58:11 +0000 |
| Subject: | Bug #65683 [Opn->Csd]: Intl does not support DateTimeImmutable | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-208127@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=65683&edit=1
ID: 65683
Updated by: nikic@php.net
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