php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #36638 strtotime unconditional false return on now <= 0
Submitted: 2006-03-06 22:27 UTC Modified: 2006-03-06 22:45 UTC
From: mikeb at tracersinfo dot com Assigned: derick (profile)
Status: Closed Package: Date/time related
PHP Version: 5.1.2 OS: Win32 (XP2) and Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: mikeb at tracersinfo dot com
New email:
PHP Version: OS:

 

 [2006-03-06 22:27 UTC] mikeb at tracersinfo dot com
Description:
------------
Despite recent modifications to the date functions that now allow negative timestamps in both of my environments (Win32 and Linux) [THANK YOU, btw!], strtotime() returns false any time the "now" parameter evaluates to 0 or less, even when it clearly demonstrates it can perform the calculation requested and the date/time in question is within reasonable bounds.

Reproduce code:
---------------
<?php

$a["mktime(1, 2, 3, 4, 5, 1967)"] = mktime(1, 2, 3, 4, 5, 1967);
$a["strtotime('-10 years', 0)"] = strtotime('-10 years', 0);
$a["strtotime('-10 years', 1)"] = strtotime('-10 years', 1);
$a["strtotime('+10 years', 0)"] = strtotime('+10 years', 0);
$a["strtotime('+10 years', 1)"] = strtotime('+10 years', 1);
$a["gmmktime(0, 0, 0, 1, 1, 1970)"] = gmmktime(0, 0, 0, 1, 1, 1970);
$a["strtotime('-10 years', gmmktime(0, 0, 0, 1, 1, 1970))"] = strtotime('-10 years', gmmktime(0, 0, 0, 1, 1, 1970));
$a["strtotime('12/31/1969 19:00:00 -10 years')"] = strtotime('12/31/1969 19:00:00 -10 years');
$a["strtotime('+10 years', gmmktime(0, 0, 0, 1, 1, 1965))"] = strtotime('+10 years', gmmktime(0, 0, 0, 1, 1, 1965));
$a["strtotime('12/31/1964 19:00:00 +10 years')"] = strtotime('12/31/1964 19:00:00 +10 years');
var_dump($a);

?>

Expected result:
----------------
array(10) {
  ["mktime(1, 2, 3, 4, 5, 1967)"]=>
  int(-86551077)
  ["strtotime('-10 years', 0)"]=>
  int(-315619200)  <------
  ["strtotime('-10 years', 1)"]=>
  int(-315619199)
  ["strtotime('+10 years', 0)"]=>
  int(315532800)  <-------
  ["strtotime('+10 years', 1)"]=>
  int(315532801)
  ["gmmktime(0, 0, 0, 1, 1, 1970)"]=>
  int(0)
  ["strtotime('-10 years', gmmktime(0, 0, 0, 1, 1, 1970))"]=>
  int(-315619200)  <------
  ["strtotime('12/31/1969 19:00:00 -10 years')"]=>
  int(-315619200)
  ["strtotime('+10 years', gmmktime(0, 0, 0, 1, 1, 1965))"]=>
  int(157766400)  <------
  ["strtotime('12/31/1964 19:00:00 +10 years')"]=>
  int(157766400)
}

Actual result:
--------------
array(10) {
  ["mktime(1, 2, 3, 4, 5, 1967)"]=>
  int(-86551077)
  ["strtotime('-10 years', 0)"]=>
  bool(false)  <------
  ["strtotime('-10 years', 1)"]=>
  int(-315619199)
  ["strtotime('+10 years', 0)"]=>
  bool(false)  <------
  ["strtotime('+10 years', 1)"]=>
  int(315532801)
  ["gmmktime(0, 0, 0, 1, 1, 1970)"]=>
  int(0)
  ["strtotime('-10 years', gmmktime(0, 0, 0, 1, 1, 1970))"]=>
  bool(false)  <------
  ["strtotime('12/31/1969 19:00:00 -10 years')"]=>
  int(-315619200)
  ["strtotime('+10 years', gmmktime(0, 0, 0, 1, 1, 1965))"]=>
  bool(false)  <------
  ["strtotime('12/31/1964 19:00:00 +10 years')"]=>
  int(157766400)
}

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-03-06 22:29 UTC] derick@php.net
I'll have a look at it.
 [2006-03-06 22:45 UTC] derick@php.net
This bug has been fixed in CVS.

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.

Fixed in CVS, the fix will be in the upcoming 5.1.3.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 12:01:29 2024 UTC