将时间以距今多久的形式表示,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 相关文章推荐
Win2000+Apache+MySql+PHP4+PERL安装使用小结
Oct 09 PHP
PHP网站提速三大“软”招
Oct 09 PHP
深入eAccelerator与memcached的区别详解
Jun 06 PHP
基于php iconv函数的使用详解
Jun 09 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
php实现对两个数组进行减法操作的方法
Apr 17 PHP
PHP实现获取文件后缀名的几种常用方法
Aug 08 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
PHP简单判断手机设备的方法
Aug 23 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
PHP使用反向Ajax技术实现在线客服系统详解
Jul 01 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
Protoss建筑一览
2020/03/14 星际争霸
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
关于Intype一些小问题的解决办法
2008/03/28 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
php实现图片添加水印功能
2014/02/13 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
Yii核心验证器api详解
2016/11/23 PHP
js技巧--转义符&quot;\&quot;的妙用
2007/01/09 Javascript
javascript dom 基本操作小结
2010/04/11 Javascript
jquery实现树形二级菜单实例代码
2013/11/20 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
JS中的phototype详解
2017/02/04 Javascript
Angular.JS去掉访问路径URL中的#号详解
2017/03/30 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
vue+element模态框中新增模态框和删除功能
2019/06/11 Javascript
Python面向对象编程基础解析(一)
2017/10/26 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
python 除法保留两位小数点的方法
2018/07/16 Python
通过cmd进入python的实例操作
2019/06/26 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
Python之变量类型和if判断方式
2020/05/05 Python
苏格兰销售女装、男装和童装的连锁店:M&Co
2018/03/16 全球购物
介绍一下.net和Java的特点和区别
2012/09/26 面试题
大学生自荐书范文
2013/12/10 职场文书
建筑项目策划书
2014/01/13 职场文书
《花瓣飘香》教学反思
2014/04/15 职场文书
团队队名口号大全
2014/06/06 职场文书
学习三严三实对照检查材料思想汇报
2014/09/22 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL