JS时间处理(一):获取指定天、月的时间

之前遇到这么个需求:获取7天的连续时间,或者3个月的连续时间

心想这不伸手就来,后来踩了些坑,于是把打脸时刻记录下来。

先捋一下思路,获取指定时间的前7天时间,将指定时间暂定为当天,再将今天时间转为时间戳,减去7天的时间戳,不就得到了前七天的时间了,手动狗头。

嘿嘿,理论存在,开始实践。

let dateList = [];
for (let i = 0; i < 7; i++) {
            let time = (new Date()).getTime() - i * 24 * 60 * 60 * 1000;
            let tragetTime = new Date(time);
            let month = tragetTime.getMonth() + 1;
            let day = tragetTime.getDate();
            tragetTime = tragetTime.getFullYear() + '-' + (month > 10 ? month : "0" + month)  + '-' + (day > 9 ? day : "0" + day);

            dateList.unshift(tragetTime);
        }

于是得到了以下数据:

思路正确,继续往下。

不对啊,不是指定日期嘛,咋替换啊,new Date()是当天日期,假如指定日期是'2022-03-08',那就是new Date('2022-03-08'),即可解决问题。

接下来看月处理,3个月直接传90天?那自然不可以了,得算出3个月距离现在多少天,重复上面步骤即可得到结果。

确定3个月前是多少号,通过时间戳转换即可得到距今多少天,代码如下:

let tempDate = new Date(date); // 指定日期的时间
let tempStr = ""; // 时间转为字符串格式
// 将时间转换为3个月的标准时间
tempDate.setMonth(tempDate.getMonth() - num);
// 再将标准时间转为yyyy/mm/dd字符串形式
tempStr = tempDate.toLocaleDateString();

接下来将完整代码贴在下面:

/**
     * @description:
     *      获取指定时间的上一周或者前3个月,
     *      为了确定当年是否为闰年,故入参为年月
     *
     *      入参格式: "2022-03-08"
     *      获取上一周调用格式:getLastWeekOr3Months("2022-03-08")
     *      获取前3个月调用格式:getLastWeekOr3Months("2022-03-08", 3)
     *      出参格式:["2022-03-08", "2022-03-07", ···, "2022-03-02"]
     * @param: 入参:"2022-03-08"
     */

getLastWeekOr3Months(date, num) {
        let dateList = [];
        let dayNum = 0;
        if (num != undefined && typeof(num) == "number" ) {
            /**
             * 思路:
             * 先根据指定日期得到3个月前日期,再根据该日期得到3个月距离现在多少天
             * 因为3个月不是指定就90天,故因此转换
            */
            let tempDate = new Date(date); // 指定日期的时间
            let tempStr = ""; // 时间转为字符串格式
            // 将时间转换为3个月的标准时间
            tempDate.setMonth(tempDate.getMonth() - num);
            // 再将标准时间转为yyyy/mm/dd字符串形式
            tempStr = tempDate.toLocaleDateString();
            // 将指定时间的yyyy-mm-dd格式转为yyyy/mm/dd字符串形式
            // 因为带-是按8点开始算,/是按0点算,会有8个小时误差
            let newDate = date.replace("-", "/");
            // 转换为时间戳,比较中间相差天数
            let diffDate = new Date(newDate).getTime() - new Date(tempStr).getTime();
            dayNum = diffDate / 86400000;
        } else {
            dayNum = 7;
        }

        for (let i = 0; i < dayNum; i++) {
            let time = (new Date(date)).getTime() - i * 24 * 60 * 60 * 1000;
            let tragetTime = new Date(time);
            let month = tragetTime.getMonth() + 1;
            let day = tragetTime.getDate();

            tragetTime = tragetTime.getFullYear() + '-' + (month > 10 ? month : "0" + month)  + '-' + (day > 9 ? day : "0" + day);
            dateList.unshift(tragetTime);
        }
        console.log('util/dateHandle.js获取一周或者3月时间', dateList);

        return dateList;
    }

以上就是本篇的全部内容,要是有什么错误的地方,欢迎小伙伴指出来,要是觉得不错的话,点赞支持一下哈

 

posted @ 2022-03-09 18:04  yyzhiqiu  阅读(1211)  评论(0编辑  收藏  举报