友好时间显示的javascript代码

一段日期友好显示的javascript脚本

标签(空格分隔): javascript


需求

需要将一个时间字符串格式(如,2016-08-15 11:23:00)显示友好时间(如,1分钟内,2分钟前等等)。
因为需要这个,所以最近开发了一个javascript函数,用于实现该需求。
时间显示规则如下:

  1. 与当前时间相差60s以内(不包括60s),显示1分钟内;
  2. 与当前时间相差60min以内(不包括60min),显示XX分钟前;
  3. 与当前时间相差24h以内(不包括24h),显示XX小时前;
  4. 与当前时间相差3d以内(不包括3d),显示XX天前;
  5. 发布时间为今年,显示MM-dd;
  6. 发布时间不在今年, 显示yyyy-MM-dd;

基本思路

Created with Raphaël 2.1.0 开始(str) 转为时间格式(date) 转为时间戳(timestamp) >=1min >=1h >=1day >=3day 不在今年 格式(yyyy-MM-dd) 显示时间字符串 yes no yes no yes no yes no yes no

简单来说,就是用当前时间的时间戳与指定时间的时间错戳相减,用这个差值进行匹配。

代码

/**
 * 获取指定时间的友好时间字符串。
 * @param str 指定的时间字符串,如yyyy-MM-dd HH:mm:ss
 * @param now 当前时间,允许时间戳,GMT时间,如果该参数为undefined,则使用浏览器时间。
 */
function getFriendlyTime(str, now){
    var currentTime = new Date(now);
    var arr = str.split(/\s+/gi);
    var temp = 0, arr1, arr2, oldTime, delta;
    var getIntValue = function(ss, defaultValue){
        try{
            return parseInt(ss, 10);
        }catch (e){
            return defaultValue;
        }
    };
    var getWidthString = function(num){
        return num < 10 ? ("0" + num) : num;
    };
    if(arr.length >= 2){
        arr1 = arr[0].split(/[\/\-]/gi);
        arr2 = arr[1].split(":");
        oldTime = new Date();
        oldTime.setYear(getIntValue(arr1[0], currentTime.getFullYear()));
        oldTime.setMonth(getIntValue(arr1[1], currentTime.getMonth() + 1) - 1);
        oldTime.setDate(getIntValue(arr1[2], currentTime.getDate()));

        oldTime.setHours(getIntValue(arr2[0], currentTime.getHours()));
        oldTime.setMinutes(getIntValue(arr2[1], currentTime.getMinutes()));
        oldTime.setSeconds(getIntValue(arr2[2], currentTime.getSeconds()));

        delta = currentTime.getTime() - oldTime.getTime();

        if(delta <= 6000){
            return "1分钟内";
        }
        else if(delta < 60 * 60 * 1000){
            return Math.floor(delta / (60 * 1000)) + "分钟前";
        }
        else if(delta < 24 * 60 * 60 * 1000){
            return Math.floor(delta / (60 * 60 * 1000)) + "小时前";
        }
        else if(delta < 3 * 24 * 60 * 60 * 1000){
            return Math.floor(delta / (24 * 60 * 60 * 1000)) + "天前";
        }
        else if(currentTime.getFullYear() != oldTime.getFullYear()){
            return [getWidthString(oldTime.getFullYear()), getWidthString(oldTime.getMonth() + 1), getWidthString(oldTime.getDate())].join("-")
        }
        else{
            return [getWidthString(oldTime.getMonth() + 1), getWidthString(oldTime.getDate())].join("-");
        }
    }
    return "";
}

调用方式: getFriendlyTime(str[, now]),如getFriendlyTime('2016-08-15 11:56:00')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值