您的位置:首页 > 编程语言 > PHP开发

友好时间显示 java以及php实现

2013-10-24 17:47 721 查看
将日期显示为 刚刚、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);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: