1. 程式人生 > 其它 >JS時間處理(一):獲取指定天、月的時間

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

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