第一种方法:
function GetWeekByDate(testTime) {
var arrayMonthDay = null;
var nowDate = new Date();//当前日期
var nowYear = nowDate.getFullYear();//当前年
var nowMonth = 1;//第一月
var nowDay = 1;//第一天
var week = 1;//第一周
//根据年是否为闰年,得到 arrayMonthDay的值
if ((nowYear % 400 == 0) || (nowYear % 4 == 0) && (nowYear % 100 != 0)) {
arrayMonthDay = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
}
else {
arrayMonthDay = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
}
//获取当前年的一月一号 是星期几
var time = nowYear + "-" + nowMonth + "-" + nowDay;
var weekDay = new Date(time).getDay();
var bdate = new Date(testTime); //选择的时间
var bmonth = bdate.getMonth() + 1; //月
var bday = bdate.getDate(); //日期
var bweek = 0;
while (true) { //如果当前的月份是验证的月份的值,并且当前的天数是验证的日期的值,则结束循环,保存日期
if (nowMonth == bmonth && nowDay == bday) {
bweek = week;
break;
}
//否则当天++,星期xx
nowDay++;
weekDay++;
//如果当天的值>当前月份所对应的的最大天数,则月份+1,日期改为1
if (nowDay > arrayMonthDay[nowMonth - 1]) {
nowMonth++;
nowDay = 1;
}
//如果当前星期大于6,则说明这周已完成,周数+1,星期改为 0
if (weekDay > 6) {
week++;
weekDay = 0;
}
}
var value = bweek ;
return value;
}
传参:
var testTime = "2019-05-13";
var weekDays = GetweekByDate(testTime);
console.log(`这里获得的具体日期所在年的周数是:${weekDays}`)
第二种方法:
function getYearWeek(dateString) {
var da = dateString; //日期格式2015-12-30
//当前日期
var date1 = new Date(
da.substring(0, 4),
parseInt(da.substring(5, 7)) - 1,
da.substring(8, 10)
);
//1月1号
var date2 = new Date(da.substring(0, 4), 0, 1);
//获取1月1号星期(以周一为第一天,0周一~6周日)
var dateWeekNum = date2.getDay() - 1;
if (dateWeekNum < 0) {
dateWeekNum = 6;
}
if (dateWeekNum < 4) {
//前移日期
date2.setDate(date2.getDate() - dateWeekNum);
} else {
//后移日期
date2.setDate(date2.getDate() + 7 - dateWeekNum);
}
var d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000);
if (d < 0) {
var date3 = date1.getFullYear() - 1 + "-12-31";
return getYearWeek(date3);
} else {
//得到年数周数
var year = date1.getFullYear();
var week = Math.ceil((d + 1) / 7);
return week;
}
}
var dateString = "2021-01-09";
getYearWeek(dateString);
console.log(getYearWeek(dateString);