here are some debug expressions i put into eclipse, if you don't believe me:
"strtotime("2110-07-16 10:07:47")" = (boolean) false
"strtotime("2110-07-16")" = (boolean) false
i'm using it in my function which returns a random date between the start and end dates:
public static function randomDate($start_date, $end_date, $format = DateTimeHelper::DATE_FORMAT_SQL_DATE)
{
if($start_date instanceof DateTime) $start_date = $start_date->format(DateTimeHelper::DATE_FORMAT_YMDHMS);
if($end_date instanceof DateTime) $end_date = $end_date->format(DateTimeHelper::DATE_FORMAT_YMDHMS);
// Convert timetamps to millis
$min = strtotime($start_date);
$max = strtotime($end_date);
// Generate random number using above bounds
$val = rand($min, $max);
// Convert back to desired date format
return date($format, $val);
}
any idea how to get it to return the right unix time for a future date?
thanks!
You cant convert dates that occur after the unix time rollover (2038)
Simple replacement of strtotime
Actual post here.
Try to keep it before Tue, 19 Jan 2038 03:14:07 UTC, when the unix timestamp epoch for 32 bit systems rolls over!
It's even described in the manual at http://php.net/strtotime
edit: Just tested: It's fixed by installing a 64 bit OS and appropriate 64 bit version of php. I guess we have time enough to fix a reincarnated millenium bug:
From the PHP manual:
See also: Year 2038 problem - Wikipedia
If you want to work with dates that fall outside the 32-bit integer date range, then use PHP's dateTime objects