将时间以距今多久的形式表示,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中Session的概念
Oct 09 PHP
php与php MySQL 之间的关系
Jul 17 PHP
PHP三元运算的2种写法代码实例
May 12 PHP
php中把美国时间转为北京时间的自定义函数分享
Jul 28 PHP
php学习笔记之面向对象
Nov 08 PHP
php支持中文字符串分割的函数
May 28 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
Dec 08 PHP
php计算多个集合的笛卡尔积实例详解
Feb 16 PHP
PHP类的自动加载机制实现方法分析
Jan 10 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 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
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
php 应用程序安全防范技术研究
2009/09/25 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
jQuery 选择器理解
2010/03/16 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
python计算文本文件行数的方法
2015/07/06 Python
Django的信号机制详解
2017/05/05 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
美国高档百货Nordstrom的折扣店:Nordstrom Rack
2017/11/13 全球购物
艺术用品:Arteza
2018/11/25 全球购物
缓刑人员思想汇报500字
2014/09/12 职场文书
合同审查法律意见书
2015/06/04 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
python模板入门教程之flask Jinja
2022/04/11 Python