AR查询怎么格式化时间戳? [ 2.0 版本 ]
public function getTagList($uid, $offset, $pagesize){
        $model = self::find()
            ->select(['id', 'title', 'likenum', 'newstime'])
            ->from('{{%tag_data}}')
            ->where(['userid' => $uid])
            ->asArray()
            ->all();
        return $model;
    }
上面的方法返回的字段中 newstime 是一个时间戳,怎么把他转换成像微博那的那种日期,
刚刚.. 3分钟前.. 5分钟前.. 1天前.. ... 之类的人性化的日期。。
                Jason_ 补充于 2017-09-12 09:11
                
                                    
            
            我是想数据从model出来之后就是格式化好的。 就是说model有没有特性直接给处理掉,不要我取出数据再去foreach处理。
最佳答案
其他 7 个回答
- 
 - 
 - 

在sql层面也可以处理吧,case when处理 ,把newstime字段改成类似这样
CASE WHEN `newstime`-`{当前时间戳}`<3*60--显示刚刚的判断条件 THEN '刚刚' WHEN `newstime`-`{当前时间戳}`>3*60 AND `newstime`-`{当前时间戳}`<5*60--显示3分钟前的判断条件 THEN '3分钟前' ...... END as newstime;共 2 条回复
        jsonrecode 回复于 2019-08-02 11:35 回复这种的话 我怎么在ar中操作
 - 

格式化时间/日期数据
默认支持一下几种格式化格式date: 这个变量将被格式化为日期 January 01, 2014.
time: 这个变量将被格式化为时间 14:23.
datetime: 这个变量将被格式化为日期+时间 January 01, 2014 14:23.
timestamp: 这个变量将被格式化为 UNIX 时间戳 unix timestamp, 例如 1412609982.
relativeTime: 这个变量将被格式化为人类可读的当前相对时间 1 hour ago.
duration: 这个变量将被格式化为人类可读的时长 1 day, 2 minutes.
时间/日期数据默认使用 date, time, datetime 方法进行格式化, 你可以对他们进行一些自己的配置,只需在配置文件里配置 dateFormat, timeFormat, 和 datetimeFormat 即可。 - 
 - 

这个其实不需要在数据库层面做,数据库层面保持 原数据很重要,然后在 view这个层面做,比如在 显示的时候调用 $model->timeFormat(); 或者 如楼上的方式直接用js之类 纯前端手段进行渲染。
共 2 条回复 - 
 
Jason_ 阿联酋
            注册时间:2014-06-05
最后登录:2023-03-09
在线时长:106小时40分
    最后登录:2023-03-09
在线时长:106小时40分
- 粉丝15
 - 金钱8250
 - 威望0
 - 积分9310