• js中自然日的计算


    需求:前端取后端返回的时间与当前时间进行比较展示,展示规则:

    1、返回的时间跟当前时间同年同月同日 显示 今天

    2、返回的时间与当前时间相差在7天以内 显示 某天前

    3、返回的时间与当前时间相差大于7天 显示 yyyy-mm-dd

    4、是自然日的计算。 例如:返回的时间是 2018-10-31 23:59:59  当前时间是 2018-11-01 14:38:00 (这里时间戳相减是小于24个小时) 或   返回的时间是 2018-10-31 00:00:01  当前时间是 2018-11-01 14:38:00 (这里时间戳相减是大于24个小时) 都算是一天

    背景:考虑过时间戳相减计算,但是行不怎么通。如下:

    function getTimeDifference(date1,date2){
            date1 = new Date(date1.replace(/-/g, "/"));
            date2 = new Date(date2.replace(/-/g, "/"));
            var days = date2.getTime() - date1.getTime();
            var time = parseInt(days / (1000 * 60 * 60 * 24));
            return time;
        }

    分析:用上面列举的时间,放到这个函数里面计算, 第一个得到的天是0  第二个是 1 显然,第一个得到的是错误的。这里是用parseInt得到的结果取整,换成向下或向上取整都有类似的问题。

    解决办法:

    var lastTime = function (time) {
        if (time === "无访问记录") return time;
        if (typeof time === "string") {
            var regexp = getRegExp('-', 'g');
            time = time.replace(regexp, '/');
        }
        var ct = getDate(),
            tt = getDate(time),
            curDate = ct.getDate(),
            tDate = tt.getDate(),
            diff = getDate().getTime() - getDate(time).getTime(),
            day = 24 * 3600 * 1000,
            count = 0;
        if (diff < 8 * day) {
            if (curDate === tDate) {
                return "今天";
            }
            while (tDate !== curDate) {
                count++;
                tt.setDate(++tDate);
                tDate = tt.getDate();
            }
            return count + "天前";
        }
        return _toDate(time);
    },

    分析:重点在while语句里面,当然 while语句在 diff < 8 * day 条件下,就不用考虑 不同月的同一天。执行环境是小程序中的wxs中,所以用的是wxs中的方法,需要的可以更换对应的js方法。

    思路来源于我另外一篇随笔:点击进入

  • 相关阅读:
    pins-模块内的代码及资源隔离方案
    Android Gradle defaultConfig详解及实用技巧
    实用抓包工具:whistle
    Gradle中的闭包
    Android Gradle 依赖配置:implementation & api
    Android Studio Run项目出现Failure [INSTALL_FAILED_TEST_ONLY]
    Android 8.0对隐式广播的进一步限制
    cookie 详解
    一分钟内搭建全web的API接口神器json-server详解
    高性能前端 art-template 模板
  • 原文地址:https://www.cnblogs.com/yunnex-xw/p/9889202.html
Copyright © 2020-2023  润新知