小谈时间计算 | 8月更文挑战

174 阅读2分钟

前言

写这篇文章的灵感来自于前两天朋友问我怎么快速的计算两个时间字符串是否在两年之内

当时我脑补了好几种方案,如何传值去用函数完成,或者其他的什么方式,但是最后还是想到了一种很简单的方法。

一个个的讲讲吧。

复杂点的函数计算

使用函数计算的灵感来源于工作中使用到的一个库: dayjs, 这个库对于时间的处理比较强大,可以很轻松的计算出来。

但是我不确定我的朋友是否能直接在项目中使用。

她是后端,被迫前端,所以我得另立她法。

这个方法非常简单,来,见证奇迹的时刻。

let target = `2021/07`; // 项目中是获取用户输入的值。
let res = +new Date() - +new Date(target) < 86400 * 1000 * 365 * 2; // 86400是一天的秒数

通过这么一个简单的方法就能计算从今天起到目标日期是否在两年内。

但是朋友提出来疑问: 例如从现在8月到用户选择的月份(精确到月)的下一个月;

2021/08 - 2019/07 实际计算的是2021/08/01 - 2019/08/01 是否在两年内。

所以目前的做法就有点小小问题

那么就完善它;

let target = `2021/07`;
let endDate = new Date(target);
endDate = endDate.setMonth(endDate.getMonth() + 1);

let res = +new Date() - +new Date(endDate) < 86400 * 1000 * 365 * 2; // 86400是一天的秒数

这样的话就完善了自动日期的处理。

封装成一个方法

前面只是做了一个简单的方法, 算是核心思想,但是距离在Vue中使用还差一点点意思,并且开始时间也是固定的,所以最终在做个处理。

data(){
    return {
        startTime: '',
        endTime: ''
    }
},
computed: {
    calcDate(){
        let result = false;
        let startTime = this.startTime || '';
        
        if(!this.endTime) return false;
        
        let endDate = new Date(this.endTime);
        endDate = endDate.setMonth(endDate.getMonth() + 1);
        result = +new Date(startTime) - +new Date(endDate) < 86400 * 1000 * 365 * 2;
        
        return result;
    }
}

最后

到这里就能自动计算是否两年内了, 如果需要其他指定的时间, 也可以自己去修改了。

如果有其他好的想法也希望大家能积极分享。