减去年份时,它会返回不同的结果

时间:2017-10-15 11:28:22

标签: php mysql time

我正在计算数据库中的日期与当前时间之间的差异。我在我的PHP代码中使用了一个名为TimeAgo()的函数。

TimeAgo()代码:

function TimeAgo ($oldTime, $newTime) 
    {
        $timeCalc = strtotime($newTime) - strtotime($oldTime);
        if ($timeCalc >= (60*60*24*30*12*2)){
            $timeCalc = intval($timeCalc/60/60/24/30/12) . " years ago";
        }else if ($timeCalc >= (60*60*24*30*12)){
            $timeCalc = intval($timeCalc/60/60/24/30/12) . " year ago";
        }else if ($timeCalc >= (60*60*24*30*2)){
            $timeCalc = intval($timeCalc/60/60/24/30) . " months ago";
        }else if ($timeCalc >= (60*60*24*30)){
            $timeCalc = intval($timeCalc/60/60/24/30) . " month ago";
        }else if ($timeCalc >= (60*60*24*2)){
            $timeCalc = intval($timeCalc/60/60/24) . " days ago";
        }else if ($timeCalc >= (60*60*24)){
            $timeCalc = " Yesterday";
        }else if ($timeCalc >= (60*60*2)){
            $timeCalc = intval($timeCalc/60/60) . " hours ago";
        }else if ($timeCalc >= (60*60)){
            $timeCalc = intval($timeCalc/60/60) . " hour ago";
        }else if ($timeCalc >= 60*2){
            $timeCalc = intval($timeCalc/60) . " minutes ago";
        }else if ($timeCalc >= 60){
            $timeCalc = intval($timeCalc/60) . " minute ago";
        }else if ($timeCalc > 0){
            $timeCalc .= " seconds ago";
        }else if ($timeCalc == 0){
            $timeCalc = "Just now";
        }
        return $timeCalc;
    }

一切正常,直到我弄乱数据库中的值。如果我将日期设置为1901-01-01 00:00:00,则应将结果返回为116 years ago,而是显示为48 years ago

我正在使用此代码显示输出:

echo TimeAgo($db_user['far_date'], date("Y-m-d H:i:s"))

当PHP计算日期时间时,我是否缺少一些简单的东西?

1 个答案:

答案 0 :(得分:2)

我认为这取决于所使用的PHP版本。我在网上找到了:

  

但是,在PHP 5.1.0之前,在某些系统(例如Windows)上,此范围仅限于01-01-1970至19-01-2038。

所以,这个默认日期发生在48年前,与你得到的相符。

在较新版本上,范围为:Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT.

如果您真的想使用这个日期,那么我建议您直接在MySQL上进行,我记得使用1000年的范围。