将时间以距今多久的形式表示,PHP,js双版本
2015-01-24信息快讯网
依然从项目需求出发,些了这个函数,PHP版本写了一个Smarty的插件,只要简单的修改下函数名就能直接在PHP中调用了,同时,为了AJAX翻页时所获取JSON数据中的时间以同样的方式显示,因此又写了一个JS的版本
废话不多说直接上代码。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遍历文件夹和文件列表示例分享
解析PHP函数array_flip()在重复数组元素删除中的作用
PHP数组排序函数合集 以及它们之间的联系分析
基于php常用函数总结(数组,字符串,时间,文件操作)
浅析php中抽象类和接口的概念以及区别
领悟php接口中interface存在的意义
解析Extjs与php数据交互(增删查改)
深入extjs与php参数交互的详解
关于js与php互相传值的介绍
解析如何修改phpmyadmin中的默认登陆超时时间
php 备份数据库代码(生成word,excel,json,xml,sql)
解析MySql与Java的时间类型
浅析php中jsonp的跨域实例
使用php 获取时间今天明天昨天时间戳的详解
解析PHP计算页面执行时间的实现代码
PHP可逆加密/解密函数分享
PHP中空字符串介绍0、null、empty和false之间的关系
PHP获取网址的顶级域名函数代码
ThinkPHP关联模型操作实例分析
Linux下CoreSeek及PHP扩展模块的安装
Thinkphp模板中使用自定义函数的方法
PHP优于Node.js的五大理由分享
PHP json格式和js json格式 js跨域调用实现代码
JSON在PHP中的应用介绍
PHP setTime 设置当前时间的代码
无JS,完全php面向过程数据分页实现代码
php日期转时间戳,指定日期转换成时间戳
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
MySQL 日期时间函数常用总结
php中json_decode()和json_encode()的使用方法
PHP中使用mktime获取时间戳的一个黑色幽默分析
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。