时间距今多久PHP,js双版本 - php语言 -

时间距今多久PHP,js双版本

时间:2012-10-04 08:25:14   来源:   评论:加载中...   点击:加载中...
依然从项目需求出发,些了这个函数,PHP版本写了一个Smarty的插件,只要简单的修改下函数名就能直接在PHP中调用了,同时,为了AJAX翻页时所...

依然从项目需求出发,些了这个函数,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.'秒前'; }eturn $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'; varepeat = function(c, l) { varepeat = ''; while (repeat.length < l) {epeat += c; }eturnepeat.substr(0, l); } var diff = len - str.length; if (diff > 0) { switch (dir) { case 'left': str = '' +epeat(chr, diff) + str; break; case 'both': var half =epeat(chr, Math.ceil(diff / 2)); str = (half + str + half).substr(1, len); break; default: str = '' + str +epeat(chr, diff); } }eturn 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);eturn format; } function timeAgo(time) { var nowTime = Date.parse(new Date()) / 1000; var time_deff = nowTime - time;etrun = ''; if (time_deff >= 259200) {etrun = formatDate('Y-m-d H:i', time); } else if (time_deff >= 172800) {etrun = "前天 " + formatDate('H:i', time); } else if (time_deff >= 86400) {etrun = "昨天" + formatDate('H:i', time); } else if (time_deff >= 3600) { hour = parseInt(time_deff / 3600); minute = parseInt((time_deff % 3600) / 60);etrun = hour + '小时'; if (minute > 0) {etrun += minute + '分钟'; }etrun += '前'; } else if (time_deff >= 60) { minute = parseInt($time_deff / 60); second = time_deff % 60;etrun = minute + '分'; if (second > 0) {etrun += second + '秒'; }etrun += '前'; }else{etrun = time_deff +'秒前'; }eturnetrun; } 


相关热词搜索:

 
上一篇:使PHPnow支持wordpress链接伪静态的方法
下一篇:php FLEA遍历输出二叉树数组
收藏 将此文推荐给朋友
分享到: