将时间以距今多久的形式表示,PHP,js双版本

 更新时间:2012年09月25日 22:44:00   作者:  
依然从项目需求出发,些了这个函数,PHP版本写了一个Smarty的插件,只要简单的修改下函数名就能直接在PHP中调用了,同时,为了AJAX翻页时所获取JSON数据中的时间以同样的方式显示,因此又写了一个JS的版本
废话不多说直接上代码。
PHP FOR Smarty
复制代码 代码如下:

* Name: time_ago
* Purpose: 将时间戳专为距当前时间的表现形式
* 1分钟内按秒
* 1小时内按分钟显示
* 1天内按时分显示
* 3天内以昨天,前天显示
* 超过3天显示具体日期
*
* @author Peter Pan
* @param int $time input int
*/
function smarty_modifier_time_ago($time) {
$time_deff = time() - $time;
$retrun = '';
if ($time_deff >= 259200) {
$retrun = date('Y-m-d H:i', $time);
} else if ($time_deff >= 172800) {
$retrun = "前天 " . date('H:i', $time);
} else if ($time_deff >= 86400) {
$retrun = "昨天" . date('H:i', $time);
} else if ($time_deff >= 3600) {
$hour = intval($time_deff / 3600);
$minute = intval(($time_deff % 3600) / 60);
$retrun = $hour . '小时';
if ($minute > 0) {
$retrun .= $minute . '分钟';
}
$retrun .= '前';
} else if ($time_deff >= 60) {
$minute = intval($time_deff / 60);
$second = $time_deff % 60;
$retrun = $minute . '分';
if ($second > 0) {
$retrun .= $second . '秒';
}
$retrun .= '前';
}else{
$retrun = $time_deff.'秒前';
}
return $retrun;
}

Javascript
JS比较复杂一点,分为3个函数实现
复制代码 代码如下:

/**
* 字符串填充
* @param string str 要进行填充的字符串
* @param int len 目标字符串长度
* @param str chr 用于填充的字符 默认为空格
* @param str dir 填充位置 left|right|both 默认为right
*/
function strPad(str, len, chr, dir){
str = str.toString();
len = (typeof len == 'number') ? len : 0;
chr = (typeof chr == 'string') ? chr : ' ';
dir = (/left|right|both/i).test(dir) ? dir : 'right';
var repeat = function(c, l) {
var repeat = '';
while (repeat.length < l) {
repeat += c;
}
return repeat.substr(0, l);
}
var diff = len - str.length;
if (diff > 0) {
switch (dir) {
case 'left':
str = '' + repeat(chr, diff) + str;
break;
case 'both':
var half = repeat(chr, Math.ceil(diff / 2));
str = (half + str + half).substr(1, len);
break;
default:
str = '' + str + repeat(chr, diff);
}
}
return str;
}
/**
* 格式化日期
* 类似php Date函数,传入Unix 时间戳(秒级)返回指定格式
* 格式(不区分大小写):
* y 表示4位年份
* m 表示2位月份
* d 表示2位日
* h 表示2位时
* i 表示2位分
* s 表示2位秒
*/
function formatDate(format,timestamp) {
var date = new Date(parseInt(timestamp) * 1000);
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
month = strPad(month,2,'0','left');
day = strPad(day,2,'0','left');
hour = strPad(hour,2,'0','left');
minute = strPad(minute,2,'0','left');
second = strPad(second,2,'0','left');
format = format.replace(/y/gi,year);
format = format.replace(/m/gi,month);
format = format.replace(/d/gi,day);
format = format.replace(/h/gi,hour);
format = format.replace(/i/gi,minute);
format = format.replace(/s/gi,second);
return format;
}
function timeAgo(time) {
var nowTime = Date.parse(new Date()) / 1000;
var time_deff = nowTime - time;
retrun = '';
if (time_deff >= 259200) {
retrun = formatDate('Y-m-d H:i', time);
} else if (time_deff >= 172800) {
retrun = "前天 " + formatDate('H:i', time);
} else if (time_deff >= 86400) {
retrun = "昨天" + formatDate('H:i', time);
} else if (time_deff >= 3600) {
hour = parseInt(time_deff / 3600);
minute = parseInt((time_deff % 3600) / 60);
retrun = hour + '小时';
if (minute > 0) {
retrun += minute + '分钟';
}
retrun += '前';
} else if (time_deff >= 60) {
minute = parseInt($time_deff / 60);
second = time_deff % 60;
retrun = minute + '分';
if (second > 0) {
retrun += second + '秒';
}
retrun += '前';
}else{
retrun = time_deff +'秒前';
}
return retrun;
}

相关文章

  • PHP 递归效率分析

    PHP 递归效率分析

    PHP的递归效率一般认为是低效的。大概一年前,我写了一篇博文,对三种遍历树的方法进行了比较,发现递归算法的效率最低。
    2009-11-11
  • 详解php中流行的rpc框架

    详解php中流行的rpc框架

    如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call)。远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个远程地方。
    2021-05-05
  • PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】

    PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】

    这篇文章主要介绍了PHP基于PDO实现的SQLite操作类,包含增删改查及事务等操作实现技巧与使用方法,需要的朋友可以参考下
    2017-06-06
  • php解决约瑟夫环算法实例分析

    php解决约瑟夫环算法实例分析

    这篇文章主要介绍了php解决约瑟夫环算法,结合实例形式分析了约瑟夫环问题的原理、解决方法及相关算法实现技巧,需要的朋友可以参考下
    2019-09-09
  • php7下安装event扩展方法

    php7下安装event扩展方法

    下面小编就为大家分享一篇php7下安装event扩展方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    假如你的网站垃圾评论很多,大部分垃圾评论是带链接的,因为要增加反向链接嘛,所以你可以使用下面的小技巧来杜绝这些带链接的垃圾评论
    2013-09-09
  • golang与PHP输出excel示例

    golang与PHP输出excel示例

    这篇文章主要介绍了golang与PHP输出excel的方法,结合实例形式对比分析了Go语言及php输出Excel文件的相关技巧,需要的朋友可以参考下
    2016-07-07
  • php计划任务之验证是否有多个进程调用同一个job的方法

    php计划任务之验证是否有多个进程调用同一个job的方法

    这篇文章主要介绍了php计划任务之验证是否有多个进程调用同一个job的方法,涉及php针对计划任务中进程调用的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • php file_get_contents取文件中数组元素的方法

    php file_get_contents取文件中数组元素的方法

    下面小编就为大家带来一篇php file_get_contents取文件中数组元素的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • php PDO异常处理详解

    php PDO异常处理详解

    这篇文章主要给大家介绍了php中PDO异常处理的相关内容,文中给大家先进行了简单的介绍,然后通过实例代码给大家介绍了使用方式,介绍的非常详细,有需要的朋友们可以参考借鉴,感兴趣的朋友们下面来一起学习学习吧。
    2016-11-11

最新评论