项目上有需要,想要得到指定日期是年内的哪一星期,网上找了一圈没有找到合适的。借鉴了一些公开的代码,加上自己动手,改造了一个,代码质量不高,但是可以满足项目需要,之后有时间再做优化。
/**
* 计算指定日期是年内的哪一星期
* @param date 时间字符串,格式:yyyy-MM-dd
* @returns week 年内的哪一星期
*/
function getWeek(date) {
// 将传递的日期字符串变成时间戳
var timeStamp = Date.parse(date);
// 根据时间戳得到时间
var dateTime = new Date(timeStamp);
// 获取今年的第一天
var newYear = new Date(dateTime.getFullYear().toString());
// 计算今天是今年的第多少天
var yearDay = Math.ceil((dateTime - newYear) / (24 * 60 * 60 * 1000)) + 1;
// 获取1月1日的星期
var oneDayAsWeek = newYear.getDay();
// 将该星期记录到临时变量
//var oneDayAsWeekTemp = oneDayAsWeek;
// 如果1月1日是星期日,则将其改为星期七
/*if (oneDayAsWeek === 0) {
oneDayAsWeekTemp = 7;
}*/
// 去掉不完整星期的天(类似下面注释的写法),这一块还有点问题
// yearDay -= (7 - oneDayAsWeekTemp - 1);
// 上面是简化的写法,简写有点问题
if (oneDayAsWeek === 0) {
// 星期日距离下星期一相差1天
yearDay -= 1;
} else if (oneDayAsWeek === 6) {
// 星期六距离下星期一相差2天
yearDay -= 2;
} else if (oneDayAsWeek === 5) {
// 星期五距离下星期一相差3天
yearDay -= 3;
} else if (oneDayAsWeek === 4) {
// 星期四距离下星期一相差4天
yearDay -= 4;
} else if (oneDayAsWeek === 3) {
// 星期三距离下星期一相差5天
yearDay -= 5;
} else if (oneDayAsWeek === 2) {
// 星期二距离下星期一相差6天
yearDay -= 6;
}
// 计算剩余的星期数
var week = Math.ceil(yearDay / 7);
// 如果当年第一天不是星期一,则需要手动加1周(原因是因为上面去掉了不完整星期的天)
if (oneDayAsWeek != 1) {
week++;
}
return week;
}