将时间以距今多久的形式表示,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 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
采集邮箱的php代码(抓取网页中的邮箱地址)
Jul 17 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
Mar 26 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
Aug 25 PHP
PHP读书笔记_运算符详解
Jul 01 PHP
Laravel实现定时任务的示例代码
Aug 10 PHP
简单实用的PHP文本缓存类实例
Mar 22 PHP
php 实现银联商务H5支付的示例代码
Oct 12 PHP
PHP安全之register_globals的on和off的区别
Jul 23 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 生成WML页面方法详解
2009/08/09 PHP
php遍历数组的方法分享
2012/03/22 PHP
php获取远程文件内容的函数
2015/11/02 PHP
PHP常见漏洞攻击分析
2016/02/21 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
基于jQuery实现表格的排序
2016/12/02 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
2020/03/08 Javascript
JavaScript中使用Spread运算符的八种方法总结
2020/06/18 Javascript
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
详解python算法之冒泡排序
2019/03/05 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
什么是接口(Interface)?
2013/02/01 面试题
土木工程毕业生自荐信
2013/11/12 职场文书
防灾减灾标语
2014/10/07 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
幼儿园老师个人总结
2015/02/28 职场文书
本科毕业论文致谢怎么写
2015/05/14 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android