在项目中经常会遇到统计表按周查询,废话不多说,直接贴代码。虽然基于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
}
粗略写写,当前代码只能查今年的,如业务需要查去年,可根据实际需要修改。