/**
* 小月:4,6,9,11
* 大月:1,3,5,7,8,10,12
* 二月:平年28 閏年(能被4整除且不能被100整除)29
*
* 數據結構:
* monthInfoList
* [
* {
* month:1,
* dayNum:31,
* boforeMoth:12,
* }
* ......
* ]
* //小於7情況 前一個月dayNum - (7-dayNow) + 1
* 算法:
* 輸入年月日(2020-04-09)
* 年月日拆開 有0則去0 得到yearNow(2020) monthNow(4) dayNow(9)
* 算出昨天的日期 yewEnd monthEnd dayEnd
* if(dayEnd>=7{
* 正常作減法(9 - 7 + 1)得到dayBegin
* monthBegin = monthEnd
* 拼接日期 monthBegin/dayBegin
* }else{(2020-03-01)
* 前一個月dayNum - (7-dayNow) + 1得到dayBegin
* monthBegin = 前一個月
* 拼接日期 monthBegin/dayBegin
* }
* 輸出 monthBegin/dayBegin,monthEnd/dayEnd
*
*/
/**
* param dateNow 當前年月日(格式2020-04-09)
*/
const BIGMONTH = [1, 3, 5, 7, 8, 10, 12];
const SMALLMONTH = [4, 6, 9, 11];
function getLateSevenDay(dateNow) {
let monthInfoList = [];
let yearNow = '';
let monthNow = '';
let dayNow = '';
let yearEnd = '';
let monthEnd = '';
let dayEnd = '';
let yearBegin = '';
let monthBegin = '';
let dayBegin = '';
let islYear = false;//是否是閏年
//初始化當前年月日
yearNow = dateNow.split("-")[0];
monthNow = dateNow.split("-")[1];
dayNow = dateNow.split("-")[2];
if (monthNow.indexOf('0') > -1) {
monthNow = monthNow.replace('0', '');
}
if (dayNow.indexOf('0') > -1) {
dayNow = dayNow.replace('0', '');
}
islYear = isLeapYear(yearNow);
//初始化monthInfoList
for (let i = 0; i < 12; i++) {
monthInfoList.push({
month: i + 1,
dayNum: 0,
beforeMonth: 0
})
}
monthInfoList.forEach(item => {
if (BIGMONTH.indexOf(item.month) > -1) {
item.dayNum = 31;
item.beforeMonth = item.month === 1 ? 12 : item.month - 1
} else if (SMALLMONTH.indexOf(item.month) > -1) {
item.dayNum = 30;
item.beforeMonth = item.month === 1 ? 12 : item.month - 1
} else {
islYear ? item.dayNum = 29 : item.dayNum = 28;
item.beforeMonth = 1;
}
})
//計算yearEnd monthEnd dayEnd
if (dayNow == 1) {
let targetMonthInfo = monthInfoList.find(item => item.month == monthNow);
yearEnd = monthNow == 1 ? (parseInt(yearNow) - 1).toString() : yearNow;
monthEnd = targetMonthInfo.beforeMonth;
let beforeMonthInfo = monthInfoList.find(item => item.month == targetMonthInfo.beforeMonth)
dayEnd = beforeMonthInfo.dayNum;
} else {
yearEnd = yearNow;
monthEnd = monthNow;
dayEnd = (parseInt(dayNow) - 1).toString();
}
//計算yearBegin monthBegin dayBegin
if (parseInt(dayEnd) >= 7) {
dayBegin = (parseInt(dayEnd) - 6).toString();
monthBegin = monthEnd.toString();
} else {
let targetMonthInfo = monthInfoList.find(item => item.month == monthNow);
let beforeMonthInfo = monthInfoList.find(item => item.month == targetMonthInfo.beforeMonth);
dayBegin = (parseInt(beforeMonthInfo.dayNum) + parseInt(dayNow) - 6).toString();
monthBegin = targetMonthInfo.beforeMonth.toString();
if (dayEnd == 1 && monthEnd == 1) {
yearBegin = (parseInt(yearEnd) - 1).toString();
} else {
yearBegin = yearEnd.toString();
}
}
let sevenDayList = generateSevenDay(parseInt(monthBegin), parseInt(dayBegin), parseInt(monthEnd), parseInt(dayEnd));
return sevenDayList;
}
/**
* param year(字符串)
*/
function isLeapYear(year) {
let flag = false;
if (parseInt(year) % 4 == 0 && parseInt(year) % 100 !== 0) {
flag = true;
}
return flag;
}
/**
*開始月日 結束月日(數字)
*/
function generateSevenDay(monthBegin, dayBegin,monthEnd, dayEnd){
let count = 0;
let sevenDayList = [];
if (monthBegin === monthEnd) {
for (let i = 0; i < 7; i++) {
sevenDayList.push(monthBegin+"."+dayBegin.toString());
dayBegin++;
}
} else {
let rest = 7 - dayEnd;
for(let i=0;i<rest;i++){
sevenDayList.push(monthBegin+"."+dayBegin.toString());
dayBegin++;
}
for(let i=0;i<dayEnd;i++){
count++;
sevenDayList.push(monthEnd+"."+count.toString());
}
}
return sevenDayList;
}
//測試
let result = getLateSevenDay('2020-01-01');
console.log(result);
JavaScript獲取最近七天日期
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.