将时间以距今多久的形式表示,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 静态化实现代码
Mar 20 PHP
php类中private属性继承问题分析
Nov 01 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
php生成百度sitemap站点地图类函数实例
Oct 17 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
帝国cms目录结构分享
Jul 06 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
laravel如何开启跨域功能示例详解
Aug 31 PHP
PHP面向对象多态性实现方法简单示例
Sep 27 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 PHP
基于laravel缓冲cache的用法详解
Oct 23 PHP
解决windows上php xdebug 无法调试的问题
Feb 19 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
使用zend studio for eclipse不能激活代码提示功能的解决办法
2009/10/11 PHP
php实现压缩多个CSS与JS文件的方法
2014/11/11 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
JavaScipt基本教程之前言
2008/01/16 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
详解Nuxt.js部署及踩过的坑
2018/08/07 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
回调函数的意义以及python实现实例
2017/06/20 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
Python简单计算文件MD5值的方法示例
2018/04/11 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
详解BeautifulSoup获取特定标签下内容的方法
2020/12/07 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
《三亚落日》教学反思
2014/04/26 职场文书
优秀员工演讲稿
2014/05/19 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
暑期家教宣传单
2015/07/14 职场文书
酒桌上的祝酒词
2015/08/12 职场文书
关于MySQL中的 like操作符详情
2021/11/17 MySQL
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python
TS 类型兼容教程示例详解
2022/09/23 Javascript