• 技术文章 >php教程 >php手册

    将时间以距今多久的形式表示,PHP,js双版本

    2016-06-13 11:58:21原创367
    废话不多说直接上代码。
    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;
    }

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php 解决旧系统 查出所有数据分页的类 下一篇:PHP手机号码归属地查询代码(API接口/mysql)
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP随机生成信用卡卡号的方法,php信用卡卡号• php的数据数据类型• zend studio 9.0.4 破解、汉化和字体颜色及快捷键相关设置• phpmyadmin 配置方法与安装教程• php下载excel无法打开的解决方法
    1/1

    PHP中文网