不管是做 app 接口,还是网站接口,经常需要这样的功能:把数据库里存放的时间戳改成需要的固定格式的日期。

比如说当天的时间戳显示多少小时或者多少分钟之前,比较像微信朋友消息下面的时间戳。超过发布时间过了一天展示成月、日,过了一年只展示年份或者展示年月日。

话不多说,直接上自己写的一个助手函数:

/**
 * 时间转日期特别定制版
 */
function timetodates($time, $type = 6, $simple = false) {
    global $DT_TIME;
    if(!$time) $time = $GLOBALS['DT_TIME'];
    if ($simple) {
        $types = array('Y-m-d', 'Y', 'm-d', 'Y/m/d', 'm/d H:i', 'Y-m-d H:i', 'Y-m-d H:i:s');
    } else {
        $types = array('Y年m月d日', 'Y年', 'm月d日', 'Y年m月d日', 'm月d日 H时i分', 'Y年m月d日 H时i分', 'Y年m月d日 H时i分s秒');
    }
    $type = isset($types[$type]) ? $types[$type] : $types[3];
    $date = '';
    $timediff = $DT_TIME - $time;
    if($timediff > 0 && $timediff < (24*3600)) {
        $hours = intval($timediff / 3600);
        $minutes = 0;
        if($hours == 0){
            $minutes = intval($timediff / 60);
        }
        return $hours ? $hours.'小时前' : $minutes.'分钟前';
    } elseif ($timediff > (365*12*24*3600) || date('Y', $DT_TIME) !== date('Y', $time)) {
        $type = $types[3];
    }
    elseif($time > 2147212800) {
        if(class_exists('DateTime')) {
            $D = new DateTime('@'.($time - 3600 * intval(str_replace('Etc/GMT', '', $GLOBALS['CFG']['timezone']))));
            $date = $D->format($type);
        }
    }
    return $date ? $date : date($type, $time);
}

第一个参数为时间戳,第二个指定固定的展示格式,第三个参数指定选择展示中文年月日还是通用版日期格式。