将时间以距今多久的形式表示,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 相关文章推荐
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
劣质的PHP代码简化
Feb 08 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
Nov 07 PHP
PHP解决URL中文GBK乱码问题的两种方法
Jun 03 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
php实现遍历目录并删除指定文件中指定内容
Jan 21 PHP
PHP实现根据银行卡号判断银行
Apr 29 PHP
php获取系统变量方法小结
May 29 PHP
PHP Cookie学习笔记
Aug 23 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
Dec 12 PHP
ThinkPHP中create()方法自动验证实例
Apr 26 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
PHP4 与 MySQL 数据库操作函数详解
2006/10/09 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
php设计模式之命令模式使用示例
2014/03/02 PHP
php根据年月获取季度的方法
2014/03/31 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
PHP+Ajax简单get验证操作示例
2019/03/02 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
2019/05/14 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
jQuery移除元素自动解绑事件实现思路及代码
2014/05/31 Javascript
JS实现点击按钮后框架内载入不同网页的方法
2015/05/05 Javascript
JS+CSS实现简单的二级下拉导航菜单效果
2015/09/21 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
详解Angular的8个主要构造块
2017/06/20 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
使用Node.js实现一个多人游戏服务器引擎
2019/03/13 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
python 把数据 json格式输出的实例代码
2016/10/31 Python
python实现的多线程端口扫描功能示例
2017/01/21 Python
Python标准库sched模块使用指南
2017/07/06 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
餐饮主管岗位职责
2013/12/10 职场文书
员工薪酬福利制度
2014/01/17 职场文书
党性教育心得体会
2014/09/03 职场文书
关于教师节的广播稿
2014/09/10 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
关于倡议书的范文
2015/04/29 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
Python实现将多张图片合成MP4视频并加入背景音乐
2022/04/28 Python