PHP_关于php时间戳最大支持到2038年问题解决办法

这个问题在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类 ]


版权声明:本文为shuimengzhilong原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。