php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #52430 date_parse parse 24:xx:xx as valid time
Submitted: 2010-07-24 21:20 UTC Modified: 2010-08-30 18:40 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:1 (100.0%)
From: pulzarraider at gmail dot com Assigned: derick (profile)
Status: Closed Package: Date/time related
PHP Version: 5.3.3 OS: Win 7
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: pulzarraider at gmail dot com
New email:
PHP Version: OS:

 

 [2010-07-24 21:20 UTC] pulzarraider at gmail dot com
Description:
------------
In the 24-hour time notation, the day begins at midnight, 00:00, and the last minute of the day begins at 23:59.

Date_parse function returns no warning and no error when any time starting with hour "24" is used as parameter. But some error is expected, because 2010-1-1 24:59:59 is NOT valid date.

This can cause serious errors in scripts that use date_parse for validating dateTime strings.

Test script:
---------------
<?php

date_parse('2010-1-1 24:00:00');
//This is invalid date, but date_parse returns no error and warning
//Expected: error "Unexpected character"

//date_parse('2010-1-1 24:59:59'); 
//This is also invalid date, but date_parse returns no error and warning
//Expected: error "Unexpected character"

?>

Expected result:
----------------
Array (
[year] => 2010
[month] => 1
[day] => 1
[hour] => 0
[minute] => 0
[second] => 0
[fraction] => 0
[warning_count] => 0 
[warnings] => Array ( ) 
[error_count] => 1 
[errors] => Array ([9]=>'Unexpected character')
[is_localtime] =>false
)

Actual result:
--------------
Array (
[year] => 2010
[month] => 1
[day] => 1
[hour] => 24                   <===== wrong
[minute] => 0
[second] => 0
[fraction] => 0
[warning_count] => 0 
[warnings] => Array ( ) 
[error_count] => 0              <===== wrong
[errors] => Array ( )           <===== wrong
[is_localtime] =>false
)


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-07-26 08:00 UTC] dtajchreber@php.net
-Status: Open +Status: Verified -Assigned To: +Assigned To: derick
 [2010-07-26 08:00 UTC] dtajchreber@php.net
According to ISO 8601: 

"As this International Standard is based on the 24-hour timekeeping system that 
is now in common use, hours are represented by two digits from [00] to [24], 
minutes are represented by two digits from [00] to [59], and seconds are 
represented by two digits from [00] to [60]. For most purposes, times will be 
represented by four digits [hhmm].

The representation of the hour by [24] is only allowed to indicate midnight, see 
5.3.2.

The representation of the second by [60] is only allowed to indicate the 
positive leap second or a time-point within that
second.

...

Midnight will normally be represented as [0000] or [2400].

...

The end of one day [2400] coincides with [0000] at the start of the next day, 
e.g. 2400 on 1985 April 12 is the same as 0000 on 1985 April 13. If there is no 
association with a date or a time-interval both a) and b) represent the same 
clock time in the 24-hour timekeeping system."

So 2400 isn't technically wrong but it doesn't look like the regular expressions 
in parse_date.re are context specific right now (eg. 24 only if followed by 00 
so it allows 2401 through 2459). This looks like a pretty big rewrite. Assigning 
to Derick.
 [2010-07-26 11:54 UTC] derick@php.net
date_parse (and friends) are not made to validate. It will also happily accept "2010-02-31" as a date. Since PHP 5.3.x, date_parse() however adds a warning if a date is invalid; I should add that for time as well:

derick@kossu:/tmp$ php bug52430.php
array(12) {
  ["year"]=>
  int(2010)
  ["month"]=>
  int(2)
  ["day"]=>
  int(31)
  ["hour"]=>
  int(24)
  ["minute"]=>
  int(52)
  ["second"]=>
  int(59)

  ["warning_count"]=>
  int(1)
  ["warnings"]=>
  array(1) {
    [20]=>
    string(27) "The parsed date was invalid"
  }
 [2010-08-30 18:40 UTC] derick@php.net
Automatic comment from SVN on behalf of derick
Revision: http://svn.php.net/viewvc/?view=revision&amp;revision=302891
Log: - Fixed bug #52430 (date_parse parse 24:xx:xx as valid time). (Derick)
 [2010-08-30 18:40 UTC] derick@php.net
-Status: Verified +Status: Closed
 [2010-08-30 18:40 UTC] derick@php.net
This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 12:01:29 2024 UTC