这个问题在64位系统中并不存在,因为是在32位系统中,以秒计算php只支持到 2147483648(2^31,到 2038-01-19 03:14:08)
:
Note:
有效的时间戳通常从 Fri, 13 Dec 1901 20:45:54 GMT 到 Tue, 19 Jan 2038 03:14:07 GMT(对应于 32 位有符号整数的最小值和最大值)。不是所有的平台都支持负的时间戳,那么日记范围就被限制为不能早于 Unix 纪元。这意味着在 1970 年 1 月 1 日之前的日期将不能用在 Windows,一些 Linux 版本,以及几个其它的操作系统中。不过 PHP 5.1.0 及更新的版本克服了此限制。 —— [ PHP手册 ]
如果在32系统PHP 5.1.0之后的版本
,可以使用new DateTime
解决:
例如:
/*可替换传统date函数*/
$utc_value = 2247484647
$curformat = 'Y-m-d';
function newDate($curformat, $utc_value)
{
while(1)
{
if($utc_value>2147483647)
{
if(date('Y', $utc_value)<2038)
{
$mydate2 = new DateTime('@'.$utcValue);
$string = $mydate2->format($curformat);
break;
}
}
$string = date($curformat, $utc_value);
break;
}
return $string;
}
/*可替换传统strtotime函数*/
$str_time = '2100-10-02';
function newStrToTime($str_time)
{
$result = strtotime($str_time);
if(empty($result))
{
$date = new DateTime($str_time);
$result = $date->format('U');
}
return $result;
}
具体DateTime类
使用方法请详查 -[ PHP手册-DateTime类 ]