这里的例子是计算一年的周区间,得到这一年的起始时间遍历放入新数组中
function naturalWeek( year ) {
var weeks = {}
var eachWeek = []
var index = 1
var yearStr = new Date( year.toString() + '/1/1' ).valueOf()
var yearEnd = new Date( (Number(year)+1).toString() + '/1/1' ).valueOf() - 1
for ( var i=yearStr; i<yearEnd; i+=86400000 ) {
var date = new Date(i).toLocaleDateString()
var day = new Date(i).getDay()
eachWeek.push( date )
weeks[index] = eachWeek
if ( day === 0 ) {
index += 1
eachWeek = []
}
}
return weeks
}
传参调用
naturalWeek( 2020 )
下面是打印的结果:
第二种方法:
//通过年份、周数获取日期范围 year 年 weeks 周 getWeekRange(2019,12))--> 2019-03-18~2019-03-24
function getWeekRange(year, weekNum) {
const yearStart = new Date(parseInt(year), 0, 1), //设置该年1.1.
firstDay = yearStart.getDay(); // 星期
// 对1.1.所在周的前后几天特殊处理.
const other = firstDay >= 0 && firstDay <= 4 ? firstDay - 1 : firstDay - 8;
//时间调整,得出要计算周的起/始时间.
// 考虑距离当年1.1.的总天数
let days = (parseInt(weekNum, 10) - 1) * 7 - other;
// 一天时间的毫秒数
let oneDay = 24 * 60 * 60 * 1000;
// 当前周 第一天 离1/1/70的毫秒数.
let dateInMs = oneDay * days + yearStart.getTime();
//日期调整(设置1/1/70至今的毫秒数)
const weekStart = new Date(dateInMs);
//当前所选周最后一天处理,同上.
let dateInMsE = oneDay * 6 + dateInMs;
const weekEnd = new Date(dateInMsE);
let weekdays = [];
for (let i = 0; i < 7; i++) {
let n = i;
let weekd = oneDay * n + dateInMs;
let weekDate = new Date(weekd);
let m = weekDate.getMonth() + 1;
m = m < 10 ? "0" + m : m;
let d = weekDate.getDate();
d = d < 10 ? "0" + d : d;
weekdays.push(m +'.' + d);
}
//下面的weekdays是拿到的这一周所有的日期 12.01这样的格式
console.log(weekdays);
//月和日的处理,一位变两位,如:1->01.
let month = weekStart.getMonth() + 1;
month = month < 10 ? "0" + month : month;
let day = weekStart.getDate();
day = day < 10 ? "0" + day : day;
let monthE = weekEnd.getMonth() + 1;
monthE = monthE < 10 ? "0" + monthE : monthE;
let dayE = weekEnd.getDate();
dayE = dayE < 10 ? "0" + dayE : dayE;
return [month + "月" + day + "日-" + (monthE + "月" + dayE + "日"),weekdays];
}