将时间以距今多久的形式表示,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 相关文章推荐
php include加载文件两种方式效率比较
Aug 08 PHP
php写的简易聊天室代码
Jun 04 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
11个PHPer必须要了解的编程规范
Sep 22 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
php实现有趣的人品测试程序实例
Jun 08 PHP
常见的四种POST 提交数据方式(小总结)
Oct 08 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
Yii 使用intervention/image拓展实现图像处理功能
Jun 22 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
Sep 30 PHP
laravel5.6实现数值转换
Oct 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实现 上一篇、下一篇的代码
2012/09/29 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
2017/07/10 PHP
javascript 流畅动画实现原理
2009/09/08 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
jQuery创建DOM元素实例解析
2015/01/19 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
小程序云函数调用API接口的方法
2019/05/17 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
Python 和 JS 有哪些相同之处
2017/11/23 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
python3 线性回归验证方法
2019/07/09 Python
详解字符串在Python内部是如何省内存的
2020/02/03 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
如何写出好的Java代码
2014/04/25 面试题
大学生实习证明范本
2014/01/15 职场文书
大学生实习感言
2014/01/16 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
2015年新学期寄语
2015/02/26 职场文书
小学英语教学反思范文
2016/02/15 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python
vue3.0 数字翻牌组件的使用方法详解
2022/04/20 Vue.js