js 获取每月有几周,根据年月周获取该周从周一到周日的日期等方法

//获取每月有几周(注:从第一个周一开始算该月第一周)
function getWeeks(year, month) {
    var d = new Date();
    // 该月第一天
    d.setFullYear(year, month - 1, 1);
    var w1 = d.getDay();
    if (w1 == 0) w1 = 7;
    // 该月天数
    d.setFullYear(year, month, 0);
    var dd = d.getDate();
    // 第一个周一
    let d1;
    if (w1 != 1) d1 = 7 - w1 + 2;
    else d1 = 1;
    let week_count = Math.ceil((dd - d1 + 1) / 7);
    return week_count;
}
//根据年月周获取该周从周一到周日的日期
function getWeekTime(year, month, weekday) {
    var d = new Date();
    // 该月第一天
    d.setFullYear(year, month - 1, 1);
    var w1 = d.getDay();
    if (w1 == 0) w1 = 7;
    // 该月天数
    d.setFullYear(year, month, 0);
    var dd = d.getDate();
    // 第一个周一
    let d1;
    if (w1 != 1) d1 = 7 - w1 + 2;
    else d1 = 1;
    var monday = d1 + (weekday - 1) * 7;
    var sunday = monday + 6;
    var from = year + "-" + month + "-" + monday;
    var to;
    if (sunday <= dd) {
        to = year + "-" + month + "-" + sunday;
    } else {
        d.setFullYear(year, month - 1, sunday);
        let days = d.getDate();
        to = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + days;
    }
    console.log(weekday + " 从" + from + " 到 " + to + "");
}
//获取每月第几周的周一的日期
function getMondayTime(year, month, weekday) {
    var d = new Date();
    // 该月第一天
    d.setFullYear(year, month - 1, 1);
    var w1 = d.getDay();
    if (w1 == 0) w1 = 7;
    // 该月天数
    d.setFullYear(year, month, 0);
    var dd = d.getDate();
    // 第一个周一
    let d1;
    if (w1 != 1) d1 = 7 - w1 + 2;
    else d1 = 1;
    var monday = d1 + (weekday - 1) * 7;
    return monday;
}
//获取周一的日期
function getMonDate() {
    var d = new Date(),
    day = d.getDay(),
    date = d.getDate();
    if (day == 1) return d;
    if (day == 0) d.setDate(date - 6);
    else d.setDate(date - day + 1);
    return d;
}
//获得周期名字
function getDayName(day) {
    var day = parseInt(day);
    if (isNaN(day) || day < 0 || day > 6) return false;
    var weekday = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
    return weekday[day];
}
//获得当前日期在当月第几周
//不包括跟上个月重合的部分
function getMonthWeek(a, b, c) {
    var date = new Date(a, parseInt(b) - 1, c),
    w = date.getDay(),
    d = date.getDate();
    return Math.ceil((d + 6 - w) / 7);
}
//获取当月最后一天日期
function getLastDay(year, month) {
    var new_year = year; //取当前的年份
    var new_month = month++; //取下一个月的第一天,方便计算(最后一天不固定)
    if (month > 12) {
        new_month -= 12; //月份减
        new_year++; //年份增
    }
    var new_date = new Date(new_year, new_month, 1); //取当年当月中的第一天
    return (new Date(new_date.getTime() - 1000 * 60 * 60 * 24)).getDate(); //获取当月最后一天日期
}
//根据当前日期获取该天所在周,若该月1号不是周一,获取该月第一周的周一日期,小于该日期的归为上个月最后一周
//当前日期几月第几周
function showDate() {
    var that = this;
    var d = this.getMonDate();
    var ds = new Date();
    var arr = [];
    for (var i = 0; i < 7; i++) {
        let weekDay = this.getDayName(d.getDay());
        let date = d.getDate() + '日';
        if (weekDay == '周一') {
            let beginTime = ds.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
            that.state.beginTime = beginTime;
        }
        if (weekDay == '周日') {
            let endTime = ds.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
            that.state.endTime = endTime;
        }
        arr.push({
            weekDay: weekDay,
            date: date
        });
        d.setDate(d.getDate() + 1);
    }
    let month = ds.getMonth() + 1;
    let weeks = this.getMonthWeek(ds.getFullYear(), month, ds.getDate()) - 1;
    //每月周一日期
    let oneDate = that.getMondayTime(ds.getFullYear(), month, 1);
    if (ds.getDate() < oneDate) {
        month = ds.getMonth();
        weeks = this.getWeeks(ds.getFullYear(), month);
    }
    console.log('month:', month, 'weeks:', weeks);
    this.setState({
        list: arr,
        yearDate: ds.getFullYear(),
        monthDate: month,
        month: ds.getMonth() + 1,
        monthWeek: '第' + weeks + '周',
        theMonthWeek: '第' + weeks + '周'
    });
}

转载自:https://www.cnblogs.com/huangjuanyu/p/7986990.html

原文地址:https://www.cnblogs.com/guohu/p/11795735.html