所谓的「人性化时间格式化」就是在原本的标准时间格式化2021-05-12 12:00:00这种格式变成比较人性化的类似刚刚、XX分钟以前、XX小时以前、XX天以前这种格式。目前主流的时间格式采用「人性化」格式的比较多,现在分享2个相关PHP代码来实现这个功能:
function dgmdate($timestamp, $format = 'dt', $timeoffset = '9999', $uformat = '') { global $_G; $format == 'u' && !$_G['setting']['dateconvert'] && $format = 'dt'; static $dformat, $tformat, $dtformat, $offset, $lang; if($dformat === null) { $dformat = getglobal('setting/dateformat'); $tformat = getglobal('setting/timeformat'); $dtformat = $dformat.' '.$tformat; $offset = getglobal('member/timeoffset'); $sysoffset = getglobal('setting/timeoffset'); $offset = $offset == 9999 ? ($sysoffset ? $sysoffset : 0) : $offset; $lang = lang('core', 'date'); } $timeoffset = $timeoffset == 9999 ? $offset : $timeoffset; $timestamp += $timeoffset * 3600; $format = empty($format) || $format == 'dt' ? $dtformat : ($format == 'd' ? $dformat : ($format == 't' ? $tformat : $format)); if($format == 'u') { $todaytimestamp = TIMESTAMP - (TIMESTAMP + $timeoffset * 3600) % 86400 + $timeoffset * 3600; $s = gmdate(!$uformat ? $dtformat : $uformat, $timestamp); $time = TIMESTAMP + $timeoffset * 3600 - $timestamp; if($timestamp >= $todaytimestamp) { if($time > 3600) { $return = intval($time / 3600).' '.$lang['hour'].$lang['before']; } elseif($time > 1800) { $return = $lang['half'].$lang['hour'].$lang['before']; } elseif($time > 60) { $return = intval($time / 60).' '.$lang['min'].$lang['before']; } elseif($time > 0) { $return = $time.' '.$lang['sec'].$lang['before']; } elseif($time == 0) { $return = $lang['now']; } else { $return = $s; } if($time >=0 && !defined('IN_MOBILE')) { $return = ''.$return.''; } } elseif(($days = intval(($todaytimestamp - $timestamp) / 86400)) >= 0 && $days < 7) { if($days == 0) { $return = $lang['yday'].' '.gmdate($tformat, $timestamp); } elseif($days == 1) { $return = $lang['byday'].' '.gmdate($tformat, $timestamp); } else { $return = ($days + 1).' '.$lang['day'].$lang['before']; } if(!defined('IN_MOBILE')) { $return = ''.$return.''; } } else { $return = $s; } return $return; } else { return gmdate($format, $timestamp); } }
上面是带有lang功能(多语言)的代码,下面分享一个不带多语言功能的,直接中文方式的,拿去即可以使用的人性化时间格式化的PHP代码,如下:
//人性化显示时间 //$sTime int 时间戳 function formatTime($sTime, $formt = 'Y-m-d') { if (!$sTime) { return ''; } //sTime=源时间,cTime=当前时间,dTime=时间差 $cTime = time(); $dTime = $cTime - $sTime; $dDay = intval(date('z',$cTime)) - intval(date('z',$sTime)); $dYear = intval(date('Y',$cTime)) - intval(date('Y',$sTime)); //n秒前,n分钟前,n小时前,日期 if ($dTime < 60 ) { if ($dTime < 10) { return '刚刚'; } else { return intval(floor($dTime / 10) * 10).'秒前'; } } elseif ($dTime < 3600 ) { return intval($dTime/60).'分钟前'; } elseif( $dTime >= 3600 && $dDay == 0 ){ return intval($dTime/3600).'小时前'; } elseif( $dDay > 0 && $dDay<=7 ){ return intval($dDay).'天前'; } elseif( $dDay > 7 && $dDay <= 30 ){ return intval($dDay/7).'周前'; } elseif( $dDay > 30 ){ return intval($dDay/30).'个月前'; } elseif ($dYear==0) { return date('m月d日', $sTime); } else { return date($formt, $sTime); } }