因公司业务软件的计算是周日至周六为一周,因此增加可选周首日按钮。
var DateUtils = {
// 获取某日是一年中的第几周 周几
getWeekNumber : function(d,m) {
// Copy date so don't modify original
d = new Date(d);
d.setHours(0, 0, 0);
var getDay = d.getDay();
// Return array of year and week number
var getFullYear = d.getFullYear();
// Get first day of year
var yearStartWeekFour=new Date(getFullYear, 0, 1);
// Set to nearest Thursday: current date + 4 - current day number
// 得到本周的星期4,7天
if(m){
yearStartWeekFour.setDate(yearStartWeekFour.getDate() + 4 - (yearStartWeekFour.getDay() || 7));
d.setDate(d.getDate() + 4 - (d.getDay() || 7));
}else{
yearStartWeekFour.setDate(yearStartWeekFour.getDate() + 4 - (yearStartWeekFour.getDay()));
d.setDate(d.getDate() + 4 - (d.getDay()));
}
// Calculate full weeks to nearest Thursday
var getWeekNo= Math.ceil((((d-yearStartWeekFour)/ 86400000) + 1) / 7);
return [ getFullYear, getWeekNo, getDay ];
},
// 获取某年某周的起始和截止日期
getStartAndEndDateByWeek : function(year, week,m) {
var Nowdate = new Date(year, 0, 1); // 1月1日
var nowweek_start;
if(m){
// Nowdate - ((Nowdate.getDay()||7) - 1)
nowweek_start = new Date(Nowdate - (Nowdate.getDay() == 0 ? 6 : (Nowdate.getDay() - 1)) * 86400000); // 周开始时间
}else{
nowweek_start = new Date(Nowdate - Nowdate.getDay() * 86400000); // 周开始时间
}
var nowweek = 1;
var start = new Date(nowweek_start - 86400000 * 7 * (nowweek - week)).format("yyyy-MM-dd");
var end = new Date(nowweek_start - 86400000 * 7 * (nowweek - week) + 86400000 * 6).format("yyyy-MM-dd");
return [ start, end ];
},
// 获取上一年第几周周几的日期
getLastDateByYwd : function(year, week, day,m) {
var lastwr = this.getStartAndEndDateByWeek(year - 1, week,m);
var lastDate = new Date(lastwr[0]);
if(m)
lastDate.setDate(lastDate.getDate() + (day == 0 ? 6 : (day - 1)));
else
lastDate.setDate(lastDate.getDate() + day);
return lastDate.format("yyyy-MM-dd");
}
}