将时间以距今多久的形式表示,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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
PHP Header用于页面跳转要注意的几个问题总结
Oct 03 PHP
深入php self与$this的详解
Jun 08 PHP
php类常量的使用详解
Jun 08 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
Jul 05 PHP
CI框架学习笔记(二) -入口文件index.php
Oct 27 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
May 15 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
May 23 PHP
php/JS实现的生成随机密码(验证码)功能示例
Jun 06 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
2018/05/12 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
javascript实现依次输入input自动定焦
2014/12/23 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
node.js cookie-parser 中间件介绍
2016/06/06 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
js+html制作简单日历的方法
2017/06/27 Javascript
vue 运用mock数据的示例代码
2017/11/07 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
webpack 静态资源集中输出的方法示例
2018/11/09 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
python实现自动重启本程序的方法
2015/07/09 Python
Python实现购物车功能的方法分析
2017/11/10 Python
python之pandas用法大全
2018/03/13 Python
对numpy中shape的深入理解
2018/06/15 Python
Django model反向关联名称的方法
2018/12/15 Python
opencv-python 提取sift特征并匹配的实例
2019/12/09 Python
python面向对象之类属性和类方法案例分析
2019/12/30 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
总经理助理岗位职责
2013/11/08 职场文书
前台接待的工作职责
2013/11/21 职场文书
暑期实习鉴定
2013/12/16 职场文书
社区中秋节活动方案
2014/01/29 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
小学生安全教育心得体会
2016/01/15 职场文书