前言
前端时间在整理主题和项目时分享了PHP和JS两种格式化时间的方法,今天这个也是在整理过程中看到的一个优化方式,有3种时间格式化方法,1小时内的展示基本一样,主要是区分天级以上有一些微小的展示差别,项目中可能不同模块、页面或多项目共用一个插件时,展示有区分使用,有需要的拿走不谢!😄
代码示例
具体展示文案大家可以读代码看到,或者简单搞个demo传入查看即可
/**
* 时间格式化多种格式
* @param init $unixTime 要格式化的参数传入,格式为时间戳,这里没有做检查和强制转换
* @param int $mode 格式化类型,3种方式选择传入
* @return string $date_str 返回格式化后的字符串
*/
public static function date_format($unixTime, $mode = 1) {
$passTime = time() - $unixTime;
if($mode == 1){
if ($passTime < 10) {
$result = sprintf('%d秒', $passTime);
} elseif ($passTime < 60) {
$result = $passTime.'秒前';
} elseif ($passTime < 3600) {
$result = ((int)($passTime / 60)) . '分钟前';
} elseif (date('Ymd') == date('Ymd', $unixTime)) {
$result = date('今天H:M', $unixTime);
} elseif (date('Y') == date('Y', $unixTime)) {
$result = date('m月d日', $unixTime);
} else {
$format = date('Y') != date('Y', $unixTime) ? "Y-m-d H:i" : "m-d H:i";
$result = date($format, $unixTime);
}
return $result;
}elseif ($mode == 2){
if ($passTime == 0) {
$result = '刚刚';
} elseif ($passTime < 60) {
$result = $passTime.'秒前';
} elseif ($passTime < 3600) {
$result = ((int)($passTime / 60)) . '分钟前';
} elseif ($passTime < 3600 * 12) {
$result = ((int)($passTime / 3600)) . '小时前';
} else {
$format = date('Y') != date('Y', $unixTime) ? "Y-m-d H:i" : "m-d H:i";
$result = date($format, $unixTime);
}
return $result;
}else{
$today = strtotime(date('Y-m-d 00:00:00'));
$yesterday = $today - 86400;
if ($passTime == 0) {
$result = '刚刚';
} elseif ($passTime < 60) {
$result = $passTime.'秒前';
} elseif ($passTime < 3600) {
$result = ((int)($passTime / 60)) . '分钟前';
} elseif ($passTime < 3600 * 12) {
$result = ((int)($passTime / 3600)) . '小时前';
} elseif($unixTime < $today and $unixTime >= $yesterday) {
$result = date('昨天H:i', $unixTime);
}elseif(date('Y') == date('Y',$unixTime)){
$result = date('m-d', $unixTime);
}else{
$result = date('Y-m-d', $unixTime);
}
return $result;
}
}