首先要先准备一些工具类函数
通过时间来获取年,月,日,周
function getDate(futureDate) {
const weeks = ['日', '一', '二', '三', '四', '五', '六']
let year = futureDate.getFullYear();
let month = zeroFill(futureDate.getMonth() + 1);
let day = zeroFill(futureDate.getDate());
return {
fullDate: `${year}-${month}-${day}`, // 完整的日期
year,
month,
day,
week: weeks[futureDate.getDay()],
}
}
补零函数,比如获取到的月份是3月,我们通过补零给它显示为03月,完整:2023-03-01
function zeroFill(num) {
return num < 10 ? `0${num}` : num
}
接下来就是获取日期延后xx天日历数据函数了。
默认获取365天一年后的日期。一共有俩参数,一个是未来xx天的数字,一个是传入当前日期和返回日期和合并数据的对象key。出发日期为start_date,返程日期为back_date返程日期可不传,这个也可以理解为第二段日期。
function getFutureDates(days = 365, params = {}) {
console.log(params)
if(typeof days != 'number') {
return console.error('请传入数字')
}
if(days < 1) {
return console.error('延后天数需大于0')
}
if(params && !(params instanceof Object)) {
return console.error('第二个参数需传入对象类型')
}
const futureDates = []; // 未来的天数
const today = new Date();
let discrepancy_day = 0;
if(params.back_date) {
if(!params.start_date) {
return console.error('请传入出发日期')
}
const _s = new Date(params.start_date).getTime();
const _b = new Date(params.back_date).getTime();
discrepancy_day = _b - _s; // 出发跟返回差了多少天
discrepancy_day = discrepancy_day / (1000 * 60 * 60 * 24); // 除以一天的时间戳 得到出发跟返程相差了多少天
}
for (let i = 0; i <= days; i++) {
// 未来的日期
const futureDate = new Date();
futureDate.setDate(today.getDate() + i);
let date = getDate(futureDate)
if(params.back_date) { // 如果有返程日期就返回返程的数据
const backDate = new Date();
backDate.setDate(today.getDate() + i + discrepancy_day)
let { year, month, day, fullDate, week } = getDate(backDate)
date.back_year = year;
date.back_month = month;
date.back_day = day;
date.back_full_date = fullDate;
date.back_week = week;
}
if(params.key) {
Object.assign(date, params.key)
}
futureDates.push(date);
}
return futureDates;
}