封装一个获取未来 xx 天的方法


可以从今天依次获取未来每一天的年月日。

首先要先准备一些工具类函数

通过时间来获取年,月,日,周
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;
}

228

声明:Web前端小站 - 前端博客 - 王搏的个人博客|版权所有,违者必究|如未注明,均为原创

转载:转载请注明原文链接 - 封装一个获取未来 xx 天的方法

评论
孙瑞杰生日