|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #51950 DateTime does not handle decimal fractions of ISO 8601 format
Submitted: 2010-05-30 19:56 UTC Modified: 2019-07-16 09:25 UTC
Avg. Score:4.3 ± 0.8
Reproduced:119 of 120 (99.2%)
Same Version:24 (20.2%)
Same OS:18 (15.1%)
From: jmf at durcommefaire dot net Assigned: cmb (profile)
Status: Not a bug Package: Date/time related
PHP Version: 5.3.2 OS: Ubuntu 10.04
Private report: No CVE-ID: None
 [2010-05-30 19:56 UTC] jmf at durcommefaire dot net
DateTime does not handle decimal fractions of ISO 8601 format (cf.

This value has decimal fraction and is not recognized by DateTime :

$dateTime = DateTime::createFromFormat(
// bool(false)

The same value without the decimal fraction is recognized :

$dateTime = DateTime::createFromFormat(
// object(DateTime)#2 (3) { ["date"]=>  string(19) "2009-04-16 12:07:23" ["timezone_type"]=>  int(2) ["timezone"]=>  string(1) "Z" }


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2010-06-06 22:25 UTC]
-Assigned To: +Assigned To: deric
 [2010-06-06 22:25 UTC]
-Assigned To: deric +Assigned To: derick
 [2014-10-15 14:25 UTC] h dot kraal at tiw dot nl
This 4+ years old bug is still present in todays systems:
Ubuntu 10.04 / PHP 5.3.2-1ubuntu4.27
Ubuntu 12.04 / PHP 5.3.10-1ubuntu3.14
Ubuntu 14.04 / PHP 5.5.9-1ubuntu4.4
 [2014-11-12 23:48 UTC] dev at jonathanlidbeck dot com
This bug is present in PHP 5.5 for Windows.
 [2015-06-25 05:05 UTC] broncha at rajesharma dot com
Confirmed on Mac. PHP version 5.5.26
 [2015-12-01 09:28 UTC] seb at rootsandrain dot com
Still broken in PHP7:
 [2016-08-07 14:51 UTC]
-Status: Assigned +Status: Not a bug -Assigned To: derick +Assigned To: cmb
 [2016-08-07 14:51 UTC]
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at and the instructions on how to report
a bug at

DateTime::ISO8601 is defined to "Y-m-d\TH:i:sO"[1], so obviously
it doesn't accept microsecond fractions. If you expect these to be
given, use another format specifier, see <>.

If you want to accept different ISO-8601 date/time formats,
don't use date_create_from_format(), but rather date_create(),
see <>.

[1] <>
 [2018-12-05 13:40 UTC] christophe at gosiau dot be
I would like to refer to this Wikipedia article:

It states:
A decimal mark, either a comma or a dot (without any preference as stated in resolution 10 of the 22nd General Conference CGPM in 2003,[14] but with a preference for a comma according to ISO 8601:2004)[15] is used as a separator between the time element and its fraction.
 [2019-07-16 08:59 UTC] divinity76 at gmail dot com
@CMB you're wrong imo. in the sample code provided, PHP is told to parse a valid ISO8601 date, and PHP fails to do so. that's a bug in my eyes. please explain how this is not a bug, is PHP not supposed to parse a ISO8601 date when told to do so?
 [2019-07-16 09:25 UTC]
> PHP is told to parse a valid ISO8601 date

No.  It is told to use the DateTime::ISO8601 format,
and the docs[1] state:

| This format is not compatible with ISO-8601, but is left this
| way for backward compatibility reasons. Use DateTime::ATOM or
| DATE_ATOM for compatibility with ISO-8601 instead.

If you think DateTime::ISO8601 should be changed for PHP 8, please
pursue the RFC process[2].

[1] <>
[2] <>
 [2021-03-16 07:19 UTC] hooby404 at gmail dot com
For anyone reading this: 

DateTime::ATOM / DATE_ATOM suffers from exactly the same problem, and there's currently (as of PHP 8.0) no easy way to correctly handle milliseconds with built-in PHP functions.

If you want to read the ISO 8601 format as produced by Javascript's Date.toJSON() in PHP, you have to rely on third party tools. 

I recommend this one:
PHP Copyright © 2001-2022 The PHP Group
All rights reserved.
Last updated: Sat Jul 02 08:05:46 2022 UTC