php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #45509 create_date_from_format() cannot parse negative (BC) dates
Submitted: 2008-07-14 13:29 UTC Modified: 2021-08-06 17:09 UTC
Votes:8
Avg. Score:4.2 ± 0.8
Reproduced:4 of 5 (80.0%)
Same Version:3 (75.0%)
Same OS:2 (50.0%)
From: tj at systisoft dot com Assigned: derick (profile)
Status: Closed Package: Date/time related
PHP Version: 5.3CVS-2008-11-11 OS: *
Private report: No CVE-ID: None
 [2008-07-14 13:29 UTC] tj at systisoft dot com
Description:
------------
While the constructor of DateTime can handle negaive dates (BC dates), create_date_from_format cannot.

Reproduce code:
---------------
$d = new DateTime("-4000-01-31"); echo $d->format("Y-m-d"), PHP_EOL;
$d = date_create_from_format("Y-m-d", "4000-01-31"); echo $d->format("Y-m-d"), PHP_EOL;
$d = date_create_from_format("Y-m-d", "-4000-01-31"); echo $d->format("Y-m-d"), PHP_EOL;

Expected result:
----------------
-4000-01-31
4000-01-31
-4000-01-31

Actual result:
--------------
-4000-01-31
4000-01-31
PHP Fatal error:  Call to a member function format() on a non-object in Command line code on line 3

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2015-08-28 01:11 UTC] cmb@php.net
-Type: Bug +Type: Feature/Change Request
 [2015-08-28 01:11 UTC] cmb@php.net
Well, the "Y" format specifier expects a four-digit year – so
actually this is not a bug. I'm changing to feature request.
 [2018-12-05 14:15 UTC] bjoern dot fischer at dezem dot de
The documentation of 'create_date_from_format()' says that the identifiers behave like the ones of 'date()'. In 'date()' when format the timestamp for the year 10000, date will output '10000' and not '0000'. So 'Y' is actually a *at least* four-digit year. See: https://3v4l.org/iOHWa

Because of this, I would argue that this actually is a bug.
 [2021-08-06 17:09 UTC] cmb@php.net
Might as well argue that the documentation is in error, or that
date() is buggy regarding this behavior.  Anyway, doesn't matter
until someone actually attempts to fix/improve it.
 [2022-05-13 10:24 UTC] git@php.net
Automatic comment on behalf of derickr
Revision: https://github.com/php/doc-en/commit/8cc12de858cd2dd0f655fe3c826ba8b66b85d8cb
Log: Fixed bug #45509: Clarify ocumentation for DateTime::format and DateTime::createFromFormat's 'Y' character
 [2022-05-13 10:24 UTC] git@php.net
-Status: Assigned +Status: Closed
 
PHP Copyright © 2001-2022 The PHP Group
All rights reserved.
Last updated: Sat Dec 03 10:05:54 2022 UTC