将日期显示为 刚刚、XX分钟(小时、天、月、年)、很久以前等友好显示形式
一、java代码实现
package neo.core.util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.opensymphony.xwork2.XWorkException;
public class DateUtil {
/* 日志 */
private final static Log log = LogFactory.getLog(DateUtil.class);
private static final SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");
private static final SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 将传入Date值转换为想要显示的字符串
* @param value 只允许java.util.Date 或 String 类型,其他类型不处理
* @return 几秒前,几分钟前,几小时前,几天前,几个月前,几年前,很久以前(10年前)
*/
public static String convertToShowStr(Object value) {
String result = null;
if (value instanceof Date) {
result = convertDateToShowStr((Date) value);
} else if (value instanceof String) {
result = convertDateToShowStr(convertToDate((String) value));
}
return result;
}
/**
* 将传入的时间字符串转换为Date
* @param value
* @return
*/
public static Date convertToDate(String value) {
Date result = null;
try {
if (value.indexOf(":") == -1) {
result = sdfDate.parse(value);
} else {
result = sdfDateTime.parse(value);
}
} catch (ParseException e) {
log.error("Could not parse date"+e.getMessage());
throw new XWorkException("Could not parse date", e);
}
return result;
}
/**
* 转换日期到指定格式方便查看的描述说明
* @param date
* @return 几秒前,几分钟前,几小时前,几天前,几个月前,几年前,很久以前(10年前),如果出现之后的时间,则提示:未知
*/
private static String convertDateToShowStr(Date date) {
String showStr = "";
long yearSeconds = 31536000L;//365 * 24 * 60 * 60;
long monthSeconds = 2592000L;//30 * 24 * 60 * 60;
long daySeconds = 86400L;//24 * 60 * 60;
long hourSeconds = 3600L;//60 * 60;
long minuteSeconds = 60L;
long time = (new Date().getTime() - date.getTime()) / 1000;
if(time<=0){
showStr = "刚刚";
return showStr;
}
if (time / yearSeconds > 0) {
int year = (int) (time / yearSeconds);
if (year > 10)
showStr = "很久前";
else {
showStr = year + "年前";
}
} else if (time / monthSeconds > 0) {
showStr = time / monthSeconds + "个月前";
} else if (time / daySeconds > 0) {
showStr = time / daySeconds + "天前";
} else if (time / hourSeconds > 0) {
showStr = time / hourSeconds + "小时前";
} else if (time / minuteSeconds > 0) {
showStr = time / minuteSeconds + "分钟前";
} else if (time > 0) {
showStr = time + "秒前";
}
return showStr;
}
public static void main(String args[]) {
//
System.out.println(DateUtil.convertToShowStr("1981-10-12 12:20:00"));
//
System.out.println(DateUtil.convertToShowStr("2011-10-12 12:20:00"));
//
System.out.println(DateUtil.convertToShowStr("2012-10-12 12:20:00"));
//
System.out.println(DateUtil.convertToShowStr("2013-01-12 12:20:00"));
//
System.out.println(DateUtil.convertToShowStr("2013-03-12 12:20:00"));
//
System.out.println(DateUtil.convertToShowStr("2013-04-12 12:20:00"));
//
System.out.println(DateUtil.convertToShowStr("2013-04-13 12:20:00"));
//
System.out.println(DateUtil.convertToShowStr("2013-04-13 14:20:00"));
//
System.out.println(DateUtil.convertToShowStr("2013-04-13 14:25:00"));
//
System.out.println(DateUtil.convertToShowStr("2013-04-13 14:26:30"));
}
}
二、php代码实现
/** * 友好的时间显示 * * @param int $sTime 待显示的时间 * @param string $type 类型. normal | mohu | full | ymd | other * @param string $alt 已失效 * @return string */ function friendlyDate($sTime,$type = 'normal',$alt = 'false') { if (!$sTime) return ''; //sTime=源时间,cTime=当前时间,dTime=时间差 $cTime = time(); $dTime = $cTime - $sTime; $dDay = intval(date("z",$cTime)) - intval(date("z",$sTime)); //$dDay = intval($dTime/3600/24); $dYear = intval(date("Y",$cTime)) - intval(date("Y",$sTime)); //normal:n秒前,n分钟前,n小时前,日期 if($type=='normal'){ if( $dTime < 60 ){ if($dTime < 10){ return '刚刚'; //by yangjs }else{ return intval(floor($dTime / 10) * 10)."秒前"; } }elseif( $dTime < 3600 ){ return intval($dTime/60)."分钟前"; //今天的数据.年份相同.日期相同. }elseif( $dYear==0 && $dDay == 0 ){ //return intval($dTime/3600)."小时前"; return '今天'.date('H:i',$sTime); }elseif($dYear==0){ return date("m月d日 H:i",$sTime); }else{ return date("Y-m-d H:i",$sTime); } }elseif($type=='mohu'){ if( $dTime < 60 ){ return $dTime."秒前"; }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) . '个月前'; } //full: Y-m-d , H:i:s }elseif($type=='full'){ return date("Y-m-d , H:i:s",$sTime); }elseif($type=='ymd'){ return date("Y-m-d",$sTime); }else{ if( $dTime < 60 ){ return $dTime."秒前"; }elseif( $dTime < 3600 ){ return intval($dTime/60)."分钟前"; }elseif( $dTime >= 3600 && $dDay == 0 ){ return intval($dTime/3600)."小时前"; }elseif($dYear==0){ return date("Y-m-d H:i:s",$sTime); }else{ return date("Y-m-d H:i:s",$sTime); } } }