将时间以距今多久的形式表示,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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
Banner程序
Oct 09 PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 PHP
php遍历文件夹所有文件子文件夹函数代码
Nov 27 PHP
C#使用PHP服务端的Web Service通信实例
Apr 08 PHP
php截取字符串函数分享
Feb 02 PHP
php使用iconv中文截断问题的解决方法
Feb 11 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
PHP简单实现数字分页功能示例
Aug 24 PHP
PHP+mysql防止SQL注入的方法小结
Apr 27 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
Jun 19 PHP
PHP实现笛卡尔积算法的实例讲解
Dec 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
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
jquery select多选框的左右移动 具体实现代码
2013/07/03 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
JavaScript程序设计之JS调试
2015/12/09 Javascript
JS、jQuery中select的用法详解
2016/04/21 Javascript
基于jQuery实现表格内容的筛选功能
2016/08/21 Javascript
easyui tree带checkbox实现单选的简单实例
2016/11/07 Javascript
vuejs指令详解
2017/02/07 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
js实现登录与注册界面
2017/11/01 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
python根据京东商品url获取产品价格
2015/08/09 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
python读写json文件的简单实现
2017/04/11 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
Python Tkinter 简单登录界面的实现
2019/06/14 Python
python3-flask-3将信息写入日志的实操方法
2019/11/12 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
基于css3实现漂亮便签样式
2013/03/18 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
美国知名女性服饰品牌:New York & Company
2017/03/23 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
高三毕业典礼演讲稿
2014/05/13 职场文书
技术入股合作协议书
2014/10/07 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
MySQL 5.7常见数据类型
2021/07/15 MySQL