工作中遇到查询今日是本年的第几周,周几,因公司要周一至周日为一周,所以写了这个小工具。
var DateUtils = {
// 获取本周是一年中的第几周 周几
getWeekNumber : function(d) {
// Copy date so don't modify original
d = new Date(d);
d.setHours(0, 0, 0);
var getDay = d.getDay();
// Set to nearest Thursday: current date + 4 - current day number
// 得到本周的星期4,7天,1号周四算第1周
d.setDate(d.getDate() + 4 - (d.getDay() || 7));
// Get first day of year
var yearStart = new Date(d.getFullYear(), 0, 1);
// Calculate full weeks to nearest Thursday
// 一天=86400000毫秒
var weekNo = Math.ceil((((d - yearStart) / 86400000) + 1) / 7)
// Return array of year and week number
var getFullYear = d.getFullYear();
var getWeekNo = weekNo;
return [ getFullYear, getWeekNo, getDay ];
},
// 获取某年某周的起始和截止日期
getStartAndEndDateByWeek : function(year, week) {
var Nowdate = new Date(year, 0, 1); // 1月1日
// Nowdate - ((Nowdate.getDay()||7) - 1)
var nowweek_start = new Date(Nowdate - (Nowdate.getDay() == 0 ? 6 : (Nowdate.getDay() - 1)) * 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 ];
},
// 获取某日期所在周 周几的日期
getDateByDateDay : function(d, weekDay) {
// 0是星期日,1是星期一,...
weekDay %= 7;
var nowDate = new Date(d);
var day = nowDate.getDay();
var time = nowDate.getTime();
var sub = weekDay - day;
if (weekDay == 0 && sub < 0) {
sub += 7;
}
time += sub * 24 * 3600000;
nowDate.setTime(time);
return nowDate.format("yyyy-MM-dd");
},
// 获取上一年第几周周几的日期
getLastDateByYwd : function(year, week, day) {
var lastwr = this.getStartAndEndDateByWeek(year - 1, week);
var lastDate = new Date(lastwr[0]);
console.info(lastDate.format("yyyy-MM-dd"));
lastDate.setDate(lastDate.getDate() + (day == 0 ? 6 : (day - 1)));
return lastDate.format("yyyy-MM-dd");
}
}