先来一个自己公司项目的源码:
项目需求描述: 从20150712日开始, ,
需求①:根据当前时间返回每一周 、周一~周日的日期(需返回2种格式 格式1:7月13日,格式2:2015-07-13)
需求②:返回当前时间本周的,周一早上9:00:00和周日的23:59:59
需求③:计算出当前时间离20150712日有多少周
需求④:在需求3基础上,如果大于一周,需要返回历史周的周一早上9:00:00和周日的23:59:59 (在此用二位数组)
function GetWeekDate(time){ var now = new Date(time); //当前日期 this.nowDayOfWeek = now.getDay(); //今天本周的第几天 this.nowYear = now.getYear(); //当前年 this.nowMonth = now.getMonth(); //月 this.nowDay = now.getDate(); //日 this.beginHour="09:00:00"; this.endHour="23:59:59"; this.nowYear += (this.nowYear < 2000) ? 1900 : 0; // this.nowDayOfWeek = this.nowDayOfWeek==0?7:this.nowDayOfWeek; // 如果是周日,就变成周七 } GetWeekDate.prototype.date2str=function(x,y){//date2str(new Date(curTime),"yyyy-MM-dd") var z ={y:x.getFullYear(),M:x.getMonth()+1,d:x.getDate(),h:x.getHours(),m:x.getMinutes(),s:x.getSeconds()}; return y.replace(/(y+|M+|d+|h+|m+|s+)/g,function(v) {return ((v.length>1?"0":"")+eval('z.'+v.slice(-1))).slice(-(v.length>2?v.length:2))}); } GetWeekDate.prototype.formatDate=function(date){//格局化日期:yyyy-MM-dd var myyear = date.getFullYear(); var mymonth = date.getMonth()+1; var myweekday = date.getDate(); //alert("formatDate"+myyear+":"+mymonth+":"+myweekday) if(mymonth < 10){ mymonth = "0" + mymonth; } if(myweekday < 10){ myweekday = "0" + myweekday; } return (myyear+"-"+mymonth + "-" + myweekday); } GetWeekDate.prototype.getWeekStartDate=function(){ //获得本周的开端日期 var weekStartDate = new Date(this.nowYear, this.nowMonth, this.nowDay - this.nowDayOfWeek+1); return this.formatDate(weekStartDate); } GetWeekDate.prototype.getWeekEndDate=function(){//获得本周的停止日期 var weekEndDate = new Date(this.nowYear, this.nowMonth, this.nowDay + (6 - this.nowDayOfWeek+1)); return this.formatDate(weekEndDate); } GetWeekDate.prototype.getAWeedkYMD=function(){//获得本周周一~周日的年月日 var ymdArr=[]; for (var i = 0; i < 7; i++) { ymdArr[i]=[]; //ymdArr[i][0]=this.formatDate(new Date(this.nowYear, this.nowMonth, this.nowDay - this.nowDayOfWeek+i+1)); ymdArr[i][0]=this.date2str(new Date(this.nowYear, this.nowMonth, this.nowDay - this.nowDayOfWeek+i+1),'yyyy-MM-dd'); ymdArr[i][1]=this.date2str(new Date(this.nowYear, this.nowMonth, this.nowDay - this.nowDayOfWeek+i+1), 'MM月dd日'); }; return ymdArr; } GetWeekDate.prototype.getQishu=function(time){//获得本周是指定日期(7.12日)的第几周 var oNDate=new Date(time); //系统当前时间 var oEDate=new Date('2015/7/12 23:59:59'); var diff= oNDate.getTime()-oEDate.getTime(); //console.log(diff) //console.log("相差天:"+diff/(24*60*60*1000)) //console.log("相差期数:"+parseInt(diff/(24*60*60*1000))/7) //console.log("取整期数:"+Math.floor(parseInt(diff/(24*60*60*1000))/7)) return (diff/(24*60*60*1000))/7; } GetWeekDate.prototype.getWeeksDates=function(time){//获取历史周排行的周一到周日时间段 var qishu = (this.qishu || this.qishu==0)?this.qishu:this.getQishu(time); //var qishu=this.getQishu(time); var WeeksTimes=[];//存放时间的二维数组 minYear=2015, minMonth=7, minDay=12; for (var i = 0; i<qishu; i++) { var sday; var eday; WeeksTimes[i]=[]; if(i==0){//如果离2015-07-12只相差1期 sday=minDay+1; //开始时间+1天 }else{//如果离2015-07-12相差期数>1 sday=minDay+1+7*i; } eday=minDay+7*(i+1);//结束时间+7天 WeeksTimes[i][0]=this.formatDate(new Date(minYear,minMonth-1,sday))+" "+this.beginHour; WeeksTimes[i][1]=this.formatDate(new Date(minYear,minMonth-1,eday))+" "+this.endHour; }; //如果是一周的周日就不要减去一期 return WeeksTimes; } GetWeekDate.prototype.todayData=function(json){//处理tender_list_week.jsp页面 var oQishu=$('.qishu'); iQishu=this.qishu;//期数+1是因为,相差0期就是第1期 oThisWeekListBtn=$('.total_list_btn'),//查看本周排行榜按钮 sTime=this.getWeekStartDate()+" "+this.beginHour, eTime=this.getWeekEndDate()+" "+this.endHour; //1、修改期数 //console.log("相差周:"+iQishu); if(/^[1-9]\d*$/.test(iQishu) || iQishu==0){//整数 +3 oQishu.html(iQishu*1+3); }else{ oQishu.html(Math.floor(iQishu)*1+4); } oThisWeekListBtn.attr("onclick","showWeekList('"+sTime+"','"+eTime+"')");//2、修改查看本周排行榜的起止时间 } GetWeekDate.prototype.historyData=function(time){//处理tender_list_week.jsp页面 var oQishu=$('.qishu'), oDateList=$('#dateList'), //顶部导航时间 oHistoryList=$('#history_cont'),//历史周 aThisWeekYMD=this.getAWeedkYMD(),//本周周一~周日的年月日 aThisWeekDates=this.getWeeksDates(time);//获取历史周排行的周一到周日时间段 iQishu=this.qishu; //console.log("相差周:"+iQishu); //1、修改期数,+4是加上前3期,在+1是如果间隔3期,当前就是第4期 //如果时间23:59:59是正整数(-1),如果是0整数(3),如果是非整数(向下取整),或负数(向上取整)但是负数不考虑 //oQishu.html(iQishu*1+3); if(/^[1-9]\d*$/.test(iQishu) || iQishu==0){//整数 +3 oQishu.html(iQishu*1+3); }else{ oQishu.html(Math.floor(iQishu)*1+4); } //2、给顶部时间追加时间 for (var i = 0; i < aThisWeekYMD.length; i++) { var str='<li data-time="'+aThisWeekYMD[i][0]+'">'+aThisWeekYMD[i][1]+'</li>'; $(str).appendTo(oDateList); }; //3、给历史周排行榜添加周期数 if(this.qishu>1){//如果相差的期数大于1期 //console.dir(aThisWeekDates) for (var j = 0; j < aThisWeekDates.length-1; j++) { var iQiNum=j+4; var str='<li onclick="showWeekList(\''+aThisWeekDates[j][0]+'\',\''+aThisWeekDates[j][1]+'\')">第'+iQiNum+'期</li>'; $(str).prependTo(oHistoryList); }; } } GetWeekDate.prototype.init=function(time){ var iQishu=this.getQishu(time),//期数+1是因为,相差0期就是第1期 json={}; json.qishu=iQishu; this.qishu=iQishu; if($('#pageType').val()=="today"){//如果是tender_list_week.jsp页面 if(new Date(time).getTime() < new Date('2015/07/12 23:59:59').getTime()){//特殊处理时间小于20150712 $('.qishu').html('3'); $('.total_list_btn').attr("onclick","showWeekList('2015-07-03 09:00:00','2015-07-12 23:59:59')"); return false; } this.todayData(json); }else if($('#pageType').val()=="history"){ if(new Date(time).getTime() < new Date('2015/07/12 23:59:59').getTime()){//特殊处理时间小于20150712 $('.qishu').html('3'); $('#dateList').addClass('dateList2').html('<li data-time="2015-07-03">07月03日</li><li data-time="2015-07-04">07月04日</li><li data-time="2015-07-05">07月05日</li><li data-time="2015-07-06">07月06日</li><li data-time="2015-07-07">07月07日</li><li data-time="2015-07-08">07月08日</li><li data-time="2015-07-09">07月09日</li><li data-time="2015-07-10">07月10日</li><li data-time="2015-07-11">07月11日</li><li data-time="2015-07-12">07月12日</li>'); $('#history_cont').html('<li onclick="showWeekList(\'2015-06-26 09:00:00\',\'2015-07-02 23:59:59\')">第二期</li><li onclick="showWeekList(\'2015-06-19 12:00:00\',\'2015-06-25 23:59:59\')">第一期</li>'); return false; } this.historyData(time); } //console.dir(this.getWeeksDates(time)); };
2、JS获取本周、本季度、本月、上月的开端日期、停止日期
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> <script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script> <script> /** * 日期范围工具类 */ var dateRangeUtil = (function () { /*** * 获得当前时间 */ this.getCurrentDate = function () { return new Date('2015','07','-1'); }; /*** * 获得本周起止时间 */ this.getCurrentWeek = function () { //起止日期数组 var startStop = new Array(); //获取当前时间 var currentDate = this.getCurrentDate(); //返回date是一周中的某一天 var week = currentDate.getDay(); //返回date是一个月中的某一天 var month = currentDate.getDate(); //一天的毫秒数 var millisecond = 1000 * 60 * 60 * 24; //减去的天数 var minusDay = week != 0 ? week - 1 : 6; //alert(minusDay); //本周 周一 var monday = new Date(currentDate.getTime() - (minusDay * millisecond)); //本周 周日 var sunday = new Date(monday.getTime() + (6 * millisecond)); //添加本周时间 startStop.push(monday); //本周起始时间 //添加本周最后一天时间 startStop.push(sunday); //本周终止时间 //返回 return startStop; }; /*** * 获得本月的起止时间 */ this.getCurrentMonth = function () { //起止日期数组 var startStop = new Array(); //获取当前时间 var currentDate = this.getCurrentDate(); //获得当前月份0-11 var currentMonth = currentDate.getMonth(); //获得当前年份4位年 var currentYear = currentDate.getFullYear(); //求出本月第一天 var firstDay = new Date(currentYear, currentMonth, 1); //当为12月的时候年份需要加1 //月份需要更新为0 也就是下一年的第一个月 if (currentMonth == 11) { currentYear++; currentMonth = 0; //就为 } else { //否则只是月份增加,以便求的下一月的第一天 currentMonth++; } //一天的毫秒数 var millisecond = 1000 * 60 * 60 * 24; //下月的第一天 var nextMonthDayOne = new Date(currentYear, currentMonth, 1); //求出上月的最后一天 var lastDay = new Date(nextMonthDayOne.getTime() - millisecond); //添加至数组中返回 startStop.push(firstDay); startStop.push(lastDay); //返回 return startStop; }; /** * 得到本季度开始的月份 * @param month 需要计算的月份 ***/ this.getQuarterSeasonStartMonth = function (month) { var quarterMonthStart = 0; var spring = 0; //春 var summer = 3; //夏 var fall = 6; //秋 var winter = 9; //冬 //月份从0-11 if (month < 3) { return spring; } if (month < 6) { return summer; } if (month < 9) { return fall; } return winter; }; /** * 获得该月的天数 * @param year年份 * @param month月份 * */ this.getMonthDays = function (year, month) { //本月第一天 1-31 var relativeDate = new Date(year, month, 1); //获得当前月份0-11 var relativeMonth = relativeDate.getMonth(); //获得当前年份4位年 var relativeYear = relativeDate.getFullYear(); //当为12月的时候年份需要加1 //月份需要更新为0 也就是下一年的第一个月 if (relativeMonth == 11) { relativeYear++; relativeMonth = 0; } else { //否则只是月份增加,以便求的下一月的第一天 relativeMonth++; } //一天的毫秒数 var millisecond = 1000 * 60 * 60 * 24; //下月的第一天 var nextMonthDayOne = new Date(relativeYear, relativeMonth, 1); //返回得到上月的最后一天,也就是本月总天数 return new Date(nextMonthDayOne.getTime() - millisecond).getDate(); }; /** * 获得本季度的起止日期 */ this.getCurrentSeason = function () { //起止日期数组 var startStop = new Array(); //获取当前时间 var currentDate = this.getCurrentDate(); //获得当前月份0-11 var currentMonth = currentDate.getMonth(); //获得当前年份4位年 var currentYear = currentDate.getFullYear(); //获得本季度开始月份 var quarterSeasonStartMonth = this.getQuarterSeasonStartMonth(currentMonth); //获得本季度结束月份 var quarterSeasonEndMonth = quarterSeasonStartMonth + 2; //获得本季度开始的日期 var quarterSeasonStartDate = new Date(currentYear, quarterSeasonStartMonth, 1); //获得本季度结束的日期 var quarterSeasonEndDate = new Date(currentYear, quarterSeasonEndMonth, this.getMonthDays(currentYear, quarterSeasonEndMonth)); //加入数组返回 startStop.push(quarterSeasonStartDate); startStop.push(quarterSeasonEndDate); //返回 return startStop; }; /*** * 得到本年的起止日期 * */ this.getCurrentYear = function () { //起止日期数组 var startStop = new Array(); //获取当前时间 var currentDate = this.getCurrentDate(); //获得当前年份4位年 var currentYear = currentDate.getFullYear(); //本年第一天 var currentYearFirstDate = new Date(currentYear, 0, 1); //本年最后一天 var currentYearLastDate = new Date(currentYear, 11, 31); //添加至数组 startStop.push(currentYearFirstDate); startStop.push(currentYearLastDate); //返回 return startStop; }; /** * 返回上一个月的第一天Date类型 * @param year 年 * @param month 月 **/ this.getPriorMonthFirstDay = function (year, month) { //年份为0代表,是本年的第一月,所以不能减 if (month == 0) { month = 11; //月份为上年的最后月份 year--; //年份减1 return new Date(year, month, 1); } //否则,只减去月份 month--; return new Date(year, month, 1); ; }; /** * 获得上一月的起止日期 * ***/ this.getPreviousMonth = function () { //起止日期数组 var startStop = new Array(); //获取当前时间 var currentDate = this.getCurrentDate(); //获得当前月份0-11 var currentMonth = currentDate.getMonth(); //获得当前年份4位年 var currentYear = currentDate.getFullYear(); //获得上一个月的第一天 var priorMonthFirstDay = this.getPriorMonthFirstDay(currentYear, currentMonth); //获得上一月的最后一天 var priorMonthLastDay = new Date(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth(), this.getMonthDays(priorMonthFirstDay.getFullYear(), priorMonthFirstDay.getMonth())); //添加至数组 startStop.push(priorMonthFirstDay); startStop.push(priorMonthLastDay); //返回 return startStop; }; /** * 获得上一周的起止日期 * **/ this.getPreviousWeek = function () { //起止日期数组 var startStop = new Array(); //获取当前时间 var currentDate = this.getCurrentDate(); //返回date是一周中的某一天 var week = currentDate.getDay(); //返回date是一个月中的某一天 var month = currentDate.getDate(); //一天的毫秒数 var millisecond = 1000 * 60 * 60 * 24; //减去的天数 var minusDay = week != 0 ? week - 1 : 6; //获得当前周的第一天 var currentWeekDayOne = new Date(currentDate.getTime() - (millisecond * minusDay)); //上周最后一天即本周开始的前一天 var priorWeekLastDay = new Date(currentWeekDayOne.getTime() - millisecond); //上周的第一天 var priorWeekFirstDay = new Date(priorWeekLastDay.getTime() - (millisecond * 6)); //添加至数组 startStop.push(priorWeekFirstDay); startStop.push(priorWeekLastDay); return startStop; }; /** * 得到上季度的起始日期 * year 这个年应该是运算后得到的当前本季度的年份 * month 这个应该是运算后得到的当前季度的开始月份 * */ this.getPriorSeasonFirstDay = function (year, month) { var quarterMonthStart = 0; var spring = 0; //春 var summer = 3; //夏 var fall = 6; //秋 var winter = 9; //冬 //月份从0-11 switch (month) {//季度的其实月份 case spring: //如果是第一季度则应该到去年的冬季 year--; month = winter; break; case summer: month = spring; break; case fall: month = summer; break; case winter: month = fall; break; }; return new Date(year, month, 1); }; /** * 得到上季度的起止日期 * **/ this.getPreviousSeason = function () { //起止日期数组 var startStop = new Array(); //获取当前时间 var currentDate = this.getCurrentDate(); //获得当前月份0-11 var currentMonth = currentDate.getMonth(); //获得当前年份4位年 var currentYear = currentDate.getFullYear(); //上季度的第一天 var priorSeasonFirstDay = this.getPriorSeasonFirstDay(currentYear, currentMonth); //上季度的最后一天 var priorSeasonLastDay = new Date(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2, this.getMonthDays(priorSeasonFirstDay.getFullYear(), priorSeasonFirstDay.getMonth() + 2)); //添加至数组 startStop.push(priorSeasonFirstDay); startStop.push(priorSeasonLastDay); return startStop; }; /** * 得到去年的起止日期 * **/ this.getPreviousYear = function () { //起止日期数组 var startStop = new Array(); //获取当前时间 var currentDate = this.getCurrentDate(); //获得当前年份4位年 var currentYear = currentDate.getFullYear(); currentYear--; var priorYearFirstDay = new Date(currentYear, 0, 1); var priorYearLastDay = new Date(currentYear, 11, 1); //添加至数组 startStop.push(priorYearFirstDay); startStop.push(priorYearLastDay); return startStop; }; return this; })(); $(function(){ $("#startDate").html( dateRangeUtil.getCurrentWeek() ); }) </script> </head> <body> <div id="startDate"></div> </body> </html>
3、JS获取本周、本季度、本月、上月的开端日期、停止日期
Js代码
/** * 获取本周、本季度、本月、上月的开端日期、停止日期 */ var now = new Date(); //当前日期 var nowDayOfWeek = now.getDay(); //今天本周的第几天 var nowDay = now.getDate(); //当前日 var nowMonth = now.getMonth(); //当前月 var nowYear = now.getYear(); //当前年 nowYear += (nowYear < 2000) ? 1900 : 0; // var lastMonthDate = new Date(); //上月日期 lastMonthDate.setDate(1); lastMonthDate.setMonth(lastMonthDate.getMonth()-1); var lastYear = lastMonthDate.getYear(); var lastMonth = lastMonthDate.getMonth(); //格局化日期:yyyy-MM-dd function formatDate(date) { var myyear = date.getFullYear(); var mymonth = date.getMonth()+1; var myweekday = date.getDate(); if(mymonth < 10){ mymonth = "0" + mymonth; } if(myweekday < 10){ myweekday = "0" + myweekday; } return (myyear+"-"+mymonth + "-" + myweekday); } //获得某月的天数 function getMonthDays(myMonth){ var monthStartDate = new Date(nowYear, myMonth, 1); var monthEndDate = new Date(nowYear, myMonth + 1, 1); var days = (monthEndDate - monthStartDate)/(1000 * 60 * 60 * 24); return days; } //获得本季度的开端月份 function getQuarterStartMonth(){ var quarterStartMonth = 0; if(nowMonth<3){ quarterStartMonth = 0; } if(2<nowMonth && nowMonth<6){ quarterStartMonth = 3; } if(5<nowMonth && nowMonth<9){ quarterStartMonth = 6; } if(nowMonth>8){ quarterStartMonth = 9; } return quarterStartMonth; } //获得本周的开端日期 function getWeekStartDate() { var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek); return formatDate(weekStartDate); } //获得本周的停止日期 function getWeekEndDate() { var weekEndDate = new Date(nowYear, nowMonth, nowDay + (6 - nowDayOfWeek)); return formatDate(weekEndDate); } //获得本月的开端日期 function getMonthStartDate(){ var monthStartDate = new Date(nowYear, nowMonth, 1); return formatDate(monthStartDate); } //获得本月的停止日期 function getMonthEndDate(){ var monthEndDate = new Date(nowYear, nowMonth, getMonthDays(nowMonth)); return formatDate(monthEndDate); } //获得上月开端时候 function getLastMonthStartDate(){ var lastMonthStartDate = new Date(nowYear, lastMonth, 1); return formatDate(lastMonthStartDate); } //获得上月停止时候 function getLastMonthEndDate(){ var lastMonthEndDate = new Date(nowYear, lastMonth, getMonthDays(lastMonth)); return formatDate(lastMonthEndDate); } //获得本季度的开端日期 function getQuarterStartDate(){ var quarterStartDate = new Date(nowYear, getQuarterStartMonth(), 1); return formatDate(quarterStartDate); } //或的本季度的停止日期 function getQuarterEndDate(){ var quarterEndMonth = getQuarterStartMonth() + 2; var quarterStartDate = new Date(nowYear, quarterEndMonth, getMonthDays(quarterEndMonth)); return formatDate(quarterStartDate); }