Bug #51950 [Com]: DateTime does not handle decimal fractions of ISO 8601 format

From: Date: Tue, 16 Mar 2021 07:19:17 +0000
Subject: Bug #51950 [Com]: DateTime does not handle decimal fractions of ISO 8601 format
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-232761@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=51950&edit=1

 ID:                 51950
 Comment by:         hooby404 at gmail dot com
 Reported by:        jmf at durcommefaire dot net
 Summary:            DateTime does not handle decimal fractions of ISO
                     8601 format
 Status:             Not a bug
 Type:               Bug
 Package:            Date/time related
 Operating System:   Ubuntu 10.04
 PHP Version:        5.3.2
 Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

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: https://carbon.nesbot.com/


Previous Comments:
------------------------------------------------------------------------
[2019-07-16 09:25:56] cmb@php.net

> 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] <https://www.php.net/manual/en/class.datetimeinterface.php#datetime.constants.iso8601>
[2] <https://wiki.php.net/rfc/howto>

------------------------------------------------------------------------
[2019-07-16 08:59:29] 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?

------------------------------------------------------------------------
[2018-12-05 13:40:25] christophe at gosiau dot be

I would like to refer to this Wikipedia article:
https://en.wikipedia.org/wiki/ISO_8601

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.

------------------------------------------------------------------------
[2016-08-07 14:51:18] cmb@php.net

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php

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 <https://3v4l.org/ADn0l>.

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

[1] <http://php.net/manual/en/class.datetime.php>

------------------------------------------------------------------------
[2015-12-01 09:28:51] seb at rootsandrain dot com

Still broken in PHP7:

https://3v4l.org/aKNVI

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


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=51950


--
Edit this bug report at https://bugs.php.net/bug.php?id=51950&edit=1


Thread (12 messages)

« previous php.bugs (#232761) next »