将时间以距今多久的形式表示,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 相关文章推荐
将数字格式的计算结果转为汉字格式
Oct 09 PHP
PHP自定义函数收代码
Aug 01 PHP
php Ubb代码编辑器函数代码
Jul 05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
php简单实现批量上传图片的方法
May 09 PHP
php 的反射详解及示例代码
Aug 25 PHP
PHP实现简易blog的制作
Oct 24 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
php实例化对象的实例方法
Nov 17 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 采集心得技巧
2009/05/15 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
2018/04/04 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
2014/06/23 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
详解Js里的for…in和for…of的用法
2019/03/28 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python对离散变量的one-hot编码方法
2018/07/11 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
2019/04/12 Python
BOSE德国官网:尽探索之力,享音乐之极
2016/12/11 全球购物
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
Perfume’s Club英国官网:购买香水和护肤品
2019/11/02 全球购物
质检的岗位职责
2013/11/17 职场文书
自我评价范文分享
2014/01/04 职场文书
成绩单家长评语大全
2014/04/16 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
幼儿园卫生保健制度
2015/08/05 职场文书
python 通过使用Yolact训练数据集
2021/04/06 Python
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python
java executor包参数处理功能 
2022/02/15 Java/Android