将时间以距今多久的形式表示,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(视频)Http下载
Dec 12 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 PHP
解析使用ThinkPHP应该掌握的调试手段
Jun 20 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
php无法连接mysql数据库的正确解决方法
Jul 01 PHP
PHP自定义函数格式化json数据示例
Sep 14 PHP
php curl常用的5个经典例子
Jan 20 PHP
PHP开发APP端微信支付功能
Feb 17 PHP
实例讲解YII2中多表关联的使用方法
Jul 21 PHP
PHP面向对象程序设计子类扩展父类(子类重新载入父类)操作详解
Jun 14 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获取表单textarea数据中的换行问题
2010/09/10 PHP
php eval函数用法总结
2012/10/31 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
childNodes.length与children.length的区别
2009/05/14 Javascript
解析Jquery的LigerUI如何实现文件上传
2013/07/09 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
关于javascript中dataset的问题小结
2015/11/16 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
2016/03/11 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
javascript原生ajax写法分享
2016/04/10 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
[02:56]DOTA2矮人直升机 英雄基础教程
2013/11/26 DOTA
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
对numpy中数组转置的求解以及向量内积计算方法
2018/10/31 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
django如何通过类视图使用装饰器
2019/07/24 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
2020/03/10 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
韩国三星集团旗下时尚品牌官网:SSF SHOP
2016/08/02 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
存储过程和函数的区别
2013/05/28 面试题
新法人代表任命书
2014/06/06 职场文书
个人授权委托书模板
2014/09/14 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle