将时间以距今多久的形式表示,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 相关文章推荐
IIS下配置Php+Mysql+zend的图文教程
Dec 08 PHP
php中获取指定IP的物理地址的代码(正则表达式)
Jun 23 PHP
php设计模式 DAO(数据访问对象模式)
Jun 26 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
Jul 04 PHP
php引用计数器进行垃圾收集机制介绍
Sep 19 PHP
php实现文件下载更能介绍
Nov 23 PHP
Yii框架上传图片用法总结
Mar 28 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 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
PHP中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
PHP取二进制文件头快速判断文件类型的实现代码
2013/08/05 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
jQuery Form表单取值的方法
2017/01/11 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
js实现转动骰子模型
2019/10/24 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
Vue 中获取当前时间并实时刷新的实现代码
2020/05/12 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
对pandas中Series的map函数详解
2018/07/25 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
Python bytes string相互转换过程解析
2020/03/05 Python
Pytorch转keras的有效方法,以FlowNet为例讲解
2020/05/26 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
详解Sticky Footer 绝对底部的两种套路
2017/11/03 HTML / CSS
美国眼镜网站:EyeBuyDirect
2017/04/13 全球购物
科技节口号
2014/06/19 职场文书
自主招生学校推荐信
2014/09/26 职场文书
干部作风建设心得体会
2014/10/22 职场文书
圣诞节开幕词
2015/01/29 职场文书
考博导师推荐信范文
2015/03/27 职场文书
2015年信访工作总结
2015/04/07 职场文书
python实现进度条的多种实现
2021/04/29 Python
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript