加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 相对日期格式总是输出“3小时前”

发布时间:2020-12-13 22:02:33 所属栏目:PHP教程 来源:网络整理
导读:我正在使用php计算指定日期和当前日期之间的日期间隔.我这样做,所以我可以打印社会友好的时间戳,如几分钟前和2小时前 当我来到小时部分时,我得到的东西在php中表现得非常有趣.下面是完整的工作代码,但当您使用此代码替换小时部分时,它总是打印出3个小时. 定
我正在使用php计算指定日期和当前日期之间的日期间隔.我这样做,所以我可以打印社会友好的时间戳,如几分钟前和2小时前

当我来到小时部分时,我得到的东西在php中表现得非常有趣.下面是完整的工作代码,但当您使用此代码替换小时部分时,它总是打印出3个小时.

定义常数DATE

// The current date timestamp
define('DATE',time());

Buggy代码在这里:

//Only the hours part that' doing something weird
case ($interval >= 3600 && $interval < 86400) :
            $return = ( date('H',$interval) < 2)
                ? (int)date('H',$interval) . ' hour ago'
                : (int)date('H',$interval) . ' hours ago';
            break;

它在指定的日期时断开,假设在这种情况下,创建日期只是一个多小时前因此导致间隔等于3660秒.似乎日期方法调用日期(‘H’,3660)导致03.它不应该导致01吗?毕竟只需一个多小时.

这里的工作代码:

public static function getTimeInterval($date)
{
    $interval = DATE - $date;

    $return = '';

    switch ( $interval )
    {
        case ($interval <= 60) :
            $return = 'a few secs ago';
            break;

        case ($interval > 60 && $interval < 3600) :
            $return = (int)date('i',$interval) . ' mins ago';
            break;

        case ($interval >= 3600 && $interval < 86400) :
            $return = ( abs((date('G',DATE) - date('G',$date))) < 2)
                ? abs((date('G',$date))) . ' hour ago'
                : abs((date('G',$date))) . ' hours ago';
            break;

        case ($interval >= 86400 && $interval < 604800) :
            $return = ( (int)date('j',$interval) === 1)
                ? (int)date('j',$interval) . ' day ago'
                : (int)date('j',$interval) . ' days ago';
            break;

        case ($interval > 604800 && $interval <= 2592000) :
            $return = 'A few weeks ago';
            break;
        case ($interval > 2592000) :
            $return = date('n',$interval) . ' months ago';
            break;
        case ($interval > 31536000) :
            $return = 'Over a year ago';
            break;

    }

    return $return;

}

解决方法

date()的结果取决于您的时区.您可以通过date_default_timezone_set()手动设置时区来更改此行为

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读