将时间以距今多久的形式表示,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用户指南-cookies部分
Oct 09 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
php牛逼的面试题分享
Jan 18 PHP
PHP利用MySQL保存session的实现思路及示例代码
Sep 09 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
Jul 01 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
Jan 11 PHP
yii通过小物件生成view的方法
Oct 08 PHP
php验证码生成器
May 24 PHP
php实现微信小程序授权登录功能(实现流程)
Nov 13 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上传图片重命名的6种解决方法的详细介绍
2013/04/28 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
ThinkPHP后台首页index使用frameset时的注意事项分析
2014/08/22 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
jquery按回车提交数据的代码示例
2013/11/05 Javascript
jquery sortable的拖动方法示例详解
2014/01/16 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
微信小程序中上传图片并进行压缩的实现代码
2018/08/28 Javascript
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
基于Python log 的正确打开方式
2018/04/28 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
Python3中编码与解码之Unicode与bytes的讲解
2019/02/28 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
Python 使用type来定义类的实现
2019/11/19 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
详解pandas赋值失败问题解决
2020/11/29 Python
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
毕业论文评语大全
2014/04/29 职场文书
爱护公共设施标语
2014/06/24 职场文书
国际贸易求职信
2014/07/05 职场文书
临时租车协议范本
2014/09/23 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
Promise静态四兄弟实现示例详解
2022/07/07 Javascript