js日期计算及快速获取周、月、季度起止日,获取指定日期周数以及星期几的小例子

转载地址: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);
}
    原文作者:qq_26676207
    原文地址: https://blog.csdn.net/qq_26676207/article/details/79849525
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞