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 isInOneYear(_year,_week){ if(_year == null || _year == '' || _week == null || _week == ''){ return true; } var theYear = getXDate(_year,_week,4).getFullYear(); if(theYear != _year){ return false; } return true; } // 獲取日期范圍顯示 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; }
如獲取2016年第一周日期,從周四開始算。則第一周的日期范圍為2016-01-07 至 2016-01-15
在提供一段調用的參考代碼:
//日期處理 function dateRange(){ var _year = $("#_year").val(); var _week = $("#_week").val(); if(isInOneYear(_year,_week)){ var showDate = getDateRange(_year,_week); $("#_dateRange_import").html(showDate); } else{ alert(_year+"年無"+_week+"周,請重新選擇"); $("#_week").val(""); } }