js 如何将后端返回的日期 转换成今天,前天,后天,明天,几天前, 几天后 以此类推, 网上找了好多 没找到我想要的

Asd528099
  • 35

js 如何将后端返回的日期 转换成今天,前天,后天,明天,几天前, 几天后 以此类推, 网上找了好多 没找到我想要的

回复
阅读 781
5 个回答

写过一个类似的,需求是倒计时,所以只做了往后的:

/***
 * @function daysTransfer - 将剩余天数转为人类可读的文字表述
 * @param day
 * @return {string}
 */
export const daysTransfer = (day = 0) => {
    const daysSet = ['今日', '明日', '后天'];
    const weekDaySet = '日一二三四五六日一二三四五六';
    if(day < 3){
        return daysSet[day|0];
    } else if(day < 8){
        const weekDay = (new Date()).getDay();
        const destinyDay = weekDay + day;
        return `${destinyDay > 6? '下': '本'}周${weekDaySet[destinyDay|0]}`
    } else {
        return `${day|0}天后`;
    }
};

配套的天数是由一个类包装的:

export class Count{
    /**
     * @constructor
     * @param duration - 时间差,为微秒数
     * @param {Number} moment - 当前时间戳
     */
    constructor(duration, moment) {
        const { floor, ceil } = Math;
        const seconds = floor(duration / 1000);

        const today = (new Date(moment)).getDay();
        const destiny = (new Date(moment + duration)).getDay();
        // Use this offset to judge if the
        const daysOff = destiny  >= today? destiny  - today: destiny - today + 7;
        const daysLeft = floor(seconds / 86400);

        // Fixme 是否还有其他需要考虑的可能???
        if(daysLeft%7 !== daysOff){
            this.day = daysLeft + 1;
        } else {
            this.day = daysLeft;
        }

        this.days = daysLeft;
        this.outTime = duration < 0;
        this.hour = floor((seconds % 86400) / 3600);
        this.minute = floor((seconds % 3600) / 60);
        this.second = seconds % 60;
        this.secondTotal = duration;
    }
}

由这个改改就能往前推了。

例子
https://www.layui.com/demo/ut...
源码
https://gitee.com/sentsin/lay...

timeAgo(time, onlyDate) 某个时间在当前时间的多久前。
参数 time:即为某个时间的时间戳或日期对象
参数 onlyDate:是否在超过30天后,只返回日期字符,而不返回时分秒

如果在3分钟以内,返回:刚刚
如果在30天以内,返回:若干分钟前、若干小时前、若干天前,如:5分钟前
如果在30天以上,返回:日期字符,如:2017-01-01

//某个时间在当前时间的多久前
    const timeAgo = function(time, onlyDate){
      var that = this
      ,arr = [[], []]
      ,stamp = new Date().getTime() - new Date(time).getTime();
      
      //返回具体日期
      if(stamp > 1000*60*60*24*31){
        stamp =  new Date(time);
        arr[0][0] = that.digit(stamp.getFullYear(), 4);
        arr[0][1] = that.digit(stamp.getMonth() + 1);
        arr[0][2] = that.digit(stamp.getDate());
        
        //是否输出时间
        if(!onlyDate){
          arr[1][0] = that.digit(stamp.getHours());
          arr[1][1] = that.digit(stamp.getMinutes());
          arr[1][2] = that.digit(stamp.getSeconds());
        }
        return arr[0].join('-') + ' ' + arr[1].join(':');
      }
      
      //30天以内,返回“多久前”
      if(stamp >= 1000*60*60*24){
        return ((stamp/1000/60/60/24)|0) + '天前';
      } else if(stamp >= 1000*60*60){
        return ((stamp/1000/60/60)|0) + '小时前';
      } else if(stamp >= 1000*60*3){ //3分钟以内为:刚刚
        return ((stamp/1000/60)|0) + '分钟前';
      } else if(stamp < 0){
        return '未来';
      } else {
        return '刚刚';
      }
    }

这你不满意就自己实现呗,这不很简单吗,最笨的方法就是计算当前时间与返回时间的时间差,然后如果相差1天就是今天,相差两天就是明天,相差三天就是后天,超过的的就是几天前或者几天后,计算多少天就是计算两个时间戳相差多少秒再除以多少一天的秒数(60*60*24)不就知道相差是多少天了吗

你知道吗?

宣传栏