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


Posted in PHP onSeptember 25, 2012

废话不多说直接上代码。
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 相关文章推荐
类的另类用法--数据的封装
Oct 09 PHP
15种PHP Encoder的比较
Mar 06 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
PHP输出缓冲控制Output Control系列函数详解
Jul 02 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
Apr 17 PHP
PHP Ajax实现无刷新附件上传
Aug 17 PHP
PHP让数组中有相同值的组成新的数组实例
Dec 31 PHP
php通过pecl方式安装扩展的实例讲解
Feb 02 PHP
laravel5使用freetds连接sql server的方法
Dec 07 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 #PHP
PHP获取网址的顶级域名函数代码
Sep 24 #PHP
ThinkPHP关联模型操作实例分析
Sep 23 #PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 #PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 #PHP
如何获知PHP程序占用多少内存(memory_get_usage)
Sep 23 #PHP
PHP管理内存函数 memory_get_usage()使用介绍
Sep 23 #PHP
You might like
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
PHP设置Cookie的HTTPONLY属性方法
2017/02/09 PHP
ThinkPHP使用getlist方法实现数据搜索功能示例
2017/05/08 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
javascript 一些用法小结
2009/09/11 Javascript
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
JavaScript操纵窗口的方法小结
2013/06/28 Javascript
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
Vue组件创建和传值的方法
2018/08/17 Javascript
Vue前端项目部署IIS的实现
2020/01/06 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
Windows8下安装Python的BeautifulSoup
2015/01/22 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
对python中的iter()函数与next()函数详解
2018/10/18 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
2020/05/15 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
python def 定义函数,调用函数方式
2020/06/02 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
小学语文课后反思精选
2014/04/25 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
开学随笔
2015/08/15 职场文书