群里看到有人找人写个函数:输入是start日期(格式YYYY-MM-DD),end日期(格式YYYY-MM-DD),输出是一个包含的月份日期数组。举例:输入start=2021-12-21,end=2022-02-04。输出是[
{ "month": "2021-12", "start": "2021-12-21", "end": "2021-12-31" },
{ "month": "2022-01", "start": "2022-01-01", "end": "2022-01-31" },
{ "month": "2022-02", "start": "2022-02-01", "end": "2022-02-04" }
]。
就浅写一下吧。
function handleDate(start, end) {
let _start = new Date(start),
_end = new Date(end),
startFullYear = _start.getFullYear(),
endFullYear = _end.getFullYear(),
startMonth = _start.getMonth() + 1,
endMonth = _end.getMonth() + 1,
date = [];
for (let year = startFullYear; year <= endFullYear; year++) {
let _startMonth = year === startFullYear ? startMonth : 1,
_endMonth = year === endFullYear ? endMonth : 12;
for (let month = _startMonth; month <= _endMonth; month++) {
let _month = month < 10 ? "0" + month : month;
date.push({
month: `${year}-${_month}`,
start:
year === startFullYear && month == startMonth
? `${year}-${_month}-${
_start.getDate() < 10
? "0" + _start.getDate()
: _start.getDate()
}`
: `${year}-${_month}-01`,
end:
year === endFullYear && month == endMonth
? `${year}-${_month}-${
_end.getDate() < 10 ? "0" + _end.getDate() : _end.getDate()
}`
: `${year}-${_month}-${new Date(year, _month, 0).getDate()}`,
});
}
}
console.log("%s 至 %s", start, end);
console.log(date);
return date;
}