将时间以距今多久的形式表示,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 相关文章推荐
一个ubbcode的函数,速度很快.
Oct 09 PHP
phpMyadmin 用户权限中英对照
Apr 02 PHP
用PHP将网址字符串转换成超链接(网址或email)
May 25 PHP
php fsockopen中多线程问题的解决办法[翻译]
Nov 09 PHP
PHP文件注释标记及规范小结
Apr 01 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
May 21 PHP
PHP+MYSQL中文乱码问题
Jul 01 PHP
PHP读取大文件的多种方法介绍
Apr 04 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 PHP
PHP实现中国公民身份证号码有效性验证示例代码
May 03 PHP
PHP常用函数之base64图片上传功能详解
Oct 21 PHP
基于PHP的微信公众号的开发流程详解
Aug 07 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
php4与php5的区别小结(配置异同)
2011/12/20 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
php防止sql注入的方法详解
2017/02/20 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
jquery获取选中的文本和值的方法
2014/07/08 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
nodejs multer实现文件上传与下载
2017/05/10 NodeJs
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
vue监听dom大小改变案例
2020/07/29 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
Python3遍历目录树实现方法
2015/05/22 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
python开发中range()函数用法实例分析
2015/11/12 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
小班秋游活动方案
2014/02/22 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
语文教师个人工作总结
2015/02/06 职场文书
教师素质教育心得体会
2016/01/19 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
导游词之镇江-金山寺
2019/10/14 职场文书
python 调用js的四种方式
2021/04/11 Python
python 中的@运算符使用
2021/05/26 Python