Bug #60650 [Opn->Bgs]: DateTime validation is incomplete
| From: | derick@php.net | Date: | Wed, 04 Jan 2012 14:20:26 +0000 |
| Subject: | Bug #60650 [Opn->Bgs]: DateTime validation is incomplete | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-166210@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=60650&edit=1
ID: 60650
Updated by: derick@php.net
Reported by: ville dot salonen at iki dot fi
Summary: DateTime validation is incomplete
-Status: Open
+Status: Bogus
Type: Bug
Package: Date/time related
PHP Version: 5.3.8
Block user comment: N
Private report: N
New Comment:
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
Hi!
The parser checks for possible day numbers (00-31) and the validation for validity. With
date_get_last_errors() you can find the warnings:
derick@whisky:~$ php
<?php
$date = new DateTime('2000-02-30');
echo $date->format('Y-m-d H:i:sP') . "\n";
var_dump(date_get_last_errors());
?>
2000-03-01 00:00:00+00:00
array(4) {
'warning_count' =>
int(1)
'warnings' =>
array(1) {
[11] =>
string(27) "The parsed date was invalid"
}
'error_count' =>
int(0)
'errors' =>
array(0) {
}
}
We can't really change this because of BC reasons.
Previous Comments:
------------------------------------------------------------------------
[2012-01-04 10:15:11] ville dot salonen at iki dot fi
Description:
------------
DateTime validation is incomplete. According to DateTime::__construct
documentation this is not a bug:
// Non-existent values roll over.
$date = new DateTime('2000-02-30');
echo $date->format('Y-m-d H:i:sP') . "\n";
I disagree. There should be at least some way to require a proper validation (such
as checkdate() function provides) for input dates. If you think this is incorrect
behavior and rolling over is the desired one, then please implement the rolling so
that one can for example give "2000-02-37" as the argument. Now DateTime checks
the day of the month like this: 0 <= x <= 31.
Test script:
---------------
<?php
$date = new DateTime('2011-02-31');
print $date->format('Y-m-d');
$date = new DateTime('2011-02-32');
print $date->format('Y-m-d');
?>
Expected result:
----------------
Both DateTime constructors should throw an Exception describing that the date is
invalid.
Actual result:
--------------
Now the constructor with '2011-02-32' as its parameter is the only one throwing
Exception about invalid date.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=60650&edit=1