转载地址:https://www.cnblogs.com/laneyfu/p/5028916.html
// 通过周数和星期计算日期
//2017年1月1日是星期日,算第一周,1月2日周一算是第二周
function dateFromWeek(year, week, day){ //year 年 //week 周 //day 星期 (1-7, 7代表周日) var date1 = new Date(year, 0, 1); var dayMS = 24*60*60*1000; var xq=date1.getDay(); var result=0 if(xq==0){ if(week!=1){ var weekMS = (week-2)*7*dayMS; result = date1.getTime()+weekMS+day*dayMS; }else{ result = date1.getTime()-(7-day)*dayMS; } }else{ var firstDay = xq*dayMS; var weekMS = (week-1)*7*dayMS; result = date1.getTime()+weekMS+day*dayMS-firstDay; } date1.setTime(result); return date1; }
JS获取日期时遇到如下需求,根据某年某周获取一周的日期。如开始日期规定为星期四到下一周的星期五为一周。
格式化日期:
function getNowFormatDate(theDate) { var day = theDate; var Year = 0; var Month = 0; var Day = 0; var CurrentDate = ""; // 初始化时间 Year= day.getFullYear();// ie火狐下都可以 Month= day.getMonth()+1; Day = day.getDate(); CurrentDate += Year + "-"; if (Month >= 10 ) { CurrentDate += Month + "-"; } else { CurrentDate += "0" + Month + "-"; } if (Day >= 10 ) { CurrentDate += Day ; } else { CurrentDate += "0" + Day ; } return CurrentDate; } 复制代码
// 获取日期范围显示
function getDateRange(_year,_week){ var beginDate; var endDate; if(_year == null || _year == '' || _week == null || _week == ''){ return ""; } beginDate = getXDate(_year,_week,4); endDate = getXDate(_year,(_week - 0 + 1),5); return getNowFormatDate(beginDate) + " 至 "+ getNowFormatDate(endDate); }
// 这个方法将取得某年(year)第几周(weeks)的星期几(weekDay)的日期
function getXDate(year,weeks,weekDay){ // 用指定的年构造一个日期对象,并将日期设置成这个年的1月1日 // 因为计算机中的月份是从0开始的,所以有如下的构造方法 var date = new Date(year,"0","1"); // 取得这个日期对象 date 的长整形时间 time var time = date.getTime(); // 将这个长整形时间加上第N周的时间偏移 // 因为第一周就是当前周,所以有:weeks-1,以此类推 // 7*24*3600000 是一星期的时间毫秒数,(JS中的日期精确到毫秒) time+=(weeks-1)*7*24*3600000; // 为日期对象 date 重新设置成时间 time date.setTime(time); return getNextDate(date,weekDay); }
// 这个方法将取得 某日期(nowDate) 所在周的星期几(weekDay)的日期
function getNextDate(nowDate,weekDay){ // 0是星期日,1是星期一,... weekDay%=7; var day = nowDate.getDay(); var time = nowDate.getTime(); var sub = weekDay-day; if(sub <= 0){ sub += 7; } time+=sub*24*3600000; nowDate.setTime(time); return nowDate; }
js获取当前指定的前几天的日期
function getBeforeDate(n){ var n = n; var d = new Date(); var year = d.getFullYear(); var mon=d.getMonth()+1; var day=d.getDate(); if(day <= n){ if(mon>1) { mon=mon-1; } else { year = year-1; mon = 12; } } d.setDate(d.getDate()-n); year = d.getFullYear(); mon=d.getMonth()+1; day=d.getDate(); s = year+"-"+(mon<10?('0'+mon):mon)+"-"+(day<10?('0'+day):day); return s; } console.log(getBeforeDate(1));//昨天的日期 console.log(getBeforeDate(7));//前七天的日期
不能把1月1号当作第一周的第一天,通常是每年的第一个星期一为第一周的第一天。修改getXDate方法如下
$.getXDate = function (year, weeks, weekDay) { // 用指定的年构造一个日期对象,并将日期设置成这个年的1月1日 // 因为计算机中的月份是从0开始的,所以有如下的构造方法 //每年第一周从第一个星期一开始 var date = new Date(year, "0", "1"); var firstday = date.getDay() if (firstday > 1) date = new Date(date.valueOf() + (8 - firstday) * 24 * 60 * 60 * 1000); // 取得这个日期对象 date 的长整形时间 time var time = date.getTime(); // 将这个长整形时间加上第N周的时间偏移 // 因为第一周就是当前周,所以有:weeks-1,以此类推 // 7*24*3600000 是一星期的时间毫秒数,(JS中的日期精确到毫秒) time += (weeks - 1) * 7 * 24 * 3600000; // 为日期对象 date 重新设置成时间 time date.setTime(time); return $.getNextDate(date, weekDay); }