将时间以距今多久的形式表示,PHP,js双版本
2012-09-25 00:00
751 查看
废话不多说直接上代码。
PHP FOR Smarty
Javascript
JS比较复杂一点,分为3个函数实现
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; }
相关文章推荐
- JS时间,中英文2个版本
- php JS 倒计时(减少客户端时间不同步时的误差)
- js格式化当前时间为yyyy-mm-dd形式
- php表示 当天0点 和 24点的 时间戳
- 史上最强大的PHP Web面试题(会做可进百度)----我的解答JS版本
- JS实现时间格式化为几秒前的形式
- js 与 php 时间戳的区别(毫秒与秒的计算方式)
- ISO8601:2004 数据存储和交换形式·信息交换·日期和时间的表示方法
- php表示一年,一个星期等时间,很好用,方便
- 将32位无符号整数表示的时间信号转化为习惯的形式
- JS与PHP日期时间对比
- 详解js正则表达式验证时间格式xxxx-xx-xx形式
- php 时间戳以毫秒形式显示
- php时间戳与js时间戳的比较
- js获取系统当前日期或当前日期-7天的"yyyy-MM-dd"表示形式
- Notadd 2.0 全新 Node.js 版本~ (开发中) [从 PHP 到 node 的踩坑记]
- php 相对时间函数(日期显示形式为相对时间)
- php根据时间戳获取今天,昨天,周几,几月几号的时间形式
- JS 与 php 时间处理