• 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;
        }

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

  • 相关阅读:
    HDU 4358 莫队算法+dfs序+离散化
    HDU 5692 线段树+dfs序
    Codeforces Round #377 (Div. 2) A B C D 水/贪心/贪心/二分
    LVS负载均衡的三种模式和八种算法总结
    hdfs 常用命令
    Linux 系统监控
    CentOS 7 时区设置
    kubernetes 留言版DEMO
    CentOS7 PostgreSQL 主从配置( 三)
    Postgres数据库在Linux中优化
  • 原文地址:https://www.cnblogs.com/yyzhiqiu/p/15986410.html
Copyright © 2020-2023  润新知