按周查询

126 阅读1分钟

微信图片_20220512104808.jpg 在项目中经常会遇到统计表按周查询,废话不多说,直接贴代码。虽然基于jquery做,但是代码逻辑可以放在任何项目:

// 按周-获取周数据
initWeeks: function (year) {
    var year = year || new Date().getFullYear()
    var days = getWeekDay(year);
    var firstDay = new Date(year + '/' + days[0]).getDay(); // 算出元旦是星期几
    var firstWeek = firstDay === 0 ? 1 : (7 - firstDay + 1); // 第一周有几天
    var weeksNum = firstWeek > days.length ? 0 : parseInt((days.length - firstWeek)/7) + 1;
    var dIndex = 0;
    var dNextIndex = 0;
    var value = '';

    // 今年第一天是星期几
    var weeksStr = '';
    for (var i = 0; i < weeksNum; i++) {
        // 今年第一天确定星期几
        if (i === 0) {
            dNextIndex = firstDay === 0 ? 0 : 7 - firstDay; // 第一天是星期日,则一周只有一天
        }
        value = year + '/' + days[dIndex] + '~' + year +'/' + days[dNextIndex];
        weeksStr += '<option value="' + value + '">' + '' + (i + 1) + '周 ('  + days[dIndex] + '~' + days[dNextIndex] + ')</option>';
        dIndex = dNextIndex + 1;
        dNextIndex = dNextIndex + 7;
    }
    $('#selectWeek').html(weeksStr);
},

// 按周-格式化天
getWeekDay: function (year) {
    var dates = [];
    var month = new Date().getMonth() + 1;
    var yDate = new Date(new Date().getTime() - 1000*60*60*24); // 昨日
    // 如果不是同一年则返回
    if (year !== yDate.getFullYear()) {
        return  [];
    }
    var day = yDate.getDate();
    month = day === 0 ? month - 1 : month;
    for (var i = 1; i <= month; i++) {
        for (var j = 1; j <= new Date(year, i, 0).getDate(); j++) {
            dates.push(formatDate(i) + '/' + formatDate(j));
            if (month === i && j === day) {
                return dates;
            }
        }
    }
    return dates;
},

// 按周-格式化数
formatDate: function (n) {
    return n.toString().length > 1 ? n : '0' + n
}

粗略写写,当前代码只能查今年的,如业务需要查去年,可根据实际需要修改。