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

以上就是本篇的全部內容,要是有什么錯誤的地方,歡迎小伙伴指出來,要是覺得不錯的話,點贊支持一下哈

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM