js时间的理解

1.根据办结类型和办结周期 得到相应的提示和显示相关日期

//根据办结时限和上报周期拿到
/**
* doc_type任务类型  0 -日报 1-周报 2-月报 3-季报
*startTime 你填写的开始时间
*需求:
*
*日报   当前时间大于填写时间   填写时间  
*			当前时间小于填写时间  填写时间   大于9点   当前时间的明天    小于9点  当前时间
*周报   当前时间大于填写时间   填写时间  
*			当前时间小于填写时间  填写时间   大于7天  当前时间天    小于7天  最近的周五
*月报   当前时间大于填写时间   填写时间  
*			当前时间小于填写时间  填写时间    大于一个月  当前时间天   小于一个月  最近的周末
*月报   当前时间大于填写时间   填写时间  
*			当前时间小于填写时间  填写时间    大于三个月  当前时间天   小于3个月  最近的季度的最后一天
*/
	function changeDate(doc_type,startTime){
		
			if('日报'==doc_type){
				var endTime=new Date(startTime);
	    		var today=new Date();
				startTime.setDate(endTime.getDate()-1);
			
				
				if((endTime.getMonth()<today.getMonth()
				  ||(endTime.getMonth()==today.getMonth()&&endTime.getDate()<=today.getDate())
				  ||(startTime.getMonth()==today.getMonth()&&startTime.getDate()<=today.getDate())
				  &&(today.getHours()<=9)
				){
					startTime=endTime;
				}else{
					
					if(today.getHours()<=9){
						startTime=today;
					}else{
						today.setDate(today.getDate()+1);
						startTime=today;
					}
					
					
				}
				
			var begin_date=DateFormat(startTime,'yyyy-M-dd');
			$("#send_date_text").val(begin_date);
			$("#begin_date_text").val(begin_date);
	    	$("#tips").show();	
        	$("#content").text("!温馨提示:您选择的该工作的上报类型为:"+doc_type+",上报的频率:每天早上9点整(系统会在上报时间当天9点整进行短信提醒)");
    	}else if('周报'==doc_type){
    		var endTime=new Date(startTime);
    		var today=new Date();
    		
    		
    		
    		var proWeekList=getProWeekList(today);
    		proWeekList.setDate(proWeekList.getDate()+7);
    		startTime=proWeekList;
    		if(endTime.getMonth()<today.getMonth()||
  				  (endTime.getMonth()==today.getMonth()&&endTime.getDate()<=today.getDate())
  				  ||(endTime.getMonth()==proWeekList.getMonth()&&endTime.getDate()<=proWeekList.getDate())
			){
    			
				startTime=endTime;
			}else{
				
    		startTime=proWeekList
				
			}
    		
    		var begin_date=DateFormat(startTime,'yyyy-M-dd');
			$("#send_date_text").val(begin_date);
			$("#begin_date_text").val(begin_date);
			var date = begin_date.split("-");
	        var weeks=new Date(date[0],parseInt(date[1]-1),date[2]);   
	        var weekend=numToChn(weeks.getDay());  //就是星期几啦
	    	$("#tips").show();	
	    	$("#content").text("!温馨提示:您选择的该工作的上报类型为:"+doc_type+",上报的频率:每周星期"+weekend+"(系统会在上报时间当天9点整进行短信提醒)");
    	}else if('月报'==doc_type){
    		var endTime=new Date(startTime);
    		var today=new Date();
    		var lastMonthDay=workToMonth(today.getMonth());
    		var numToAdd =lastMonthDay-today.getDate();
    		startTime.setDate(today.getDate()+numToAdd);
    		startTime.setMonth(today.getMonth());
    		if(endTime.getMonth()<today.getMonth()||
    				(endTime.getMonth()==today.getMonth()&&endTime.getDate()<=today.getDate())
    				 ||(endTime.getMonth()==startTime.getMonth()&&endTime.getDate()<=startTime.getDate())
    		){
  				startTime=endTime;
  			}else{
  				
  				today.setDate(today.getDate()+numToAdd);
      			startTime=today;
  			}
    		
    		var begin_date=DateFormat(startTime,'yyyy-M-dd');
			$("#send_date_text").val(begin_date);
			$("#begin_date_text").val(begin_date);
			var date = begin_date.split("-");
	    	var day=date[2];
	    	$("#tips").show();	
	    	$("#content").text("!温馨提示:您选择的该工作的上报类型为:"+doc_type+",上报的频率:每月"+day+"号(系统会在上报时间当天9点整进行短信提醒)");
    	}else if('季报'==doc_type){
    		var today=new Date();
    		
    	
    		var today=new Date();
    		var endTime=new Date(startTime);
    		//先计算出季报的时间
    		today=workToSeason(today);
  			startTime=today;
    	
    		if(endTime.getMonth()<today.getMonth()||
    				(endTime.getMonth()==today.getMonth()&&endTime.getDate()<=today.getDate())
    				 ||(endTime.getMonth()==startTime.getMonth()&&endTime.getDate()<=startTime.getDate())
    		){
    			
  				startTime=endTime;
  			}else{
  				today=workToSeason(today);
  				startTime=today;
  			}
    		
    			
    		var begin_date=DateFormat(startTime,'yyyy-M-dd');
			$("#send_date_text").val(begin_date);
			$("#begin_date_text").val(begin_date);
			var date = begin_date.split("-");
	    	var month=date[1].charAt(1);
	    	var day=date[2];
	    	var season=month%3==0?3:month%3;
	    	$("#tips").show();	
	    	$("#content").text("!温馨提示:您选择的该工作的上报类型为:"+doc_type+",上报的频率:每季度第"+season+"个月第"+day+"号(系统会在上报时间当天9点整进行短信提醒)");
    	}
	}
	//上周的日期
	 function getProWeekList(date){
	  var dateTime = date.getTime(); // 获取现在的时间
	  var dateDay = date.getDay();
	  var oneDayTime = 24 * 60 * 60 * 1000;
	  var proWeekList = [];
	
	  for(var i = 0; i < 7; i++){
	    var time = dateTime - (dateDay + (7 - 1 - i)) * oneDayTime;
	    proWeekList[i] = new Date(time); 
	  }
	  return proWeekList[4];
	}

	//当前月的最后一天
	function getCurrentMonthLast(){
        var date=new Date();
        var currentMonth=date.getMonth();
        var nextMonth=++currentMonth;
        var nextMonthFirstDay=new Date(date.getFullYear(),nextMonth,1);
        var oneDay=1000*60*60*24;
        var lastTime = new Date(nextMonthFirstDay-oneDay);
        var month = parseInt(lastTime.getMonth()+1);
        var day = lastTime.getDate();
        if (month < 10) {
            month = '0' + month
        }
        if (day < 10) {
            day = '0' + day
        }
        return new Date(date.getFullYear() + '-' + month + '-' + day );
    }

	
	//时间格式转换工具
	var DateFormat = function  () {
	    var 
	    dateReg = /y{3,4}|M{1,2}|m{1,2}|d{1,4}|H{1,2}|h{1,2}|s{1,4}|tt|q/g,
	    fnLabels = 'yyyy d dddd H m s sss'.split(' '),
	    fnNames = 'getFullYear getDate getDay getHours getMinutes getSeconds getMilliseconds'.split(' '),
	    bu0Labels = 'MM dd HH hh mm ss'.split(' '),
	    plus1 = function (m) {return m-0+1;},
	    defaultStrings = {
	        dddd :'日 一 二 三 四 五 六'.split(' '),
	        M: plus1,
	        q: plus1,
	        tt: function  (d) {
	            return d>1 ? 'PM' : 'AM';
	        }
	    },
	    defaultFormat = 'yyyy-MM-dd',
	    formats = {
	        h: function  (d) {
	            return d.getHours()%12 || 12;
	        },
	        M: function  (d) {
	            return d.getMonth();
	        },
	        q: function (d) {
	            return Math.floor(d.getMonth()/3);
	        },
	        tt: function (d) {
	            return d.getHours()/12;
	        },
	        ssss: function (d) {
	            return bu0(d.getMilliseconds(),4);
	        }
	    };
	    for(var f = fnLabels.length;f--;){
	        var fl = fnLabels[f].split(':');
	        (function  (ff,nn) {
	            formats[ff] = function  (d) {
	                return d[nn]();
	            }   
	        })(fnLabels[f],fnNames[f])      
	    }
	    for(var b = bu0Labels.length;b--;) {
	        (function  (ff,fn) {
	            formats[ff] = function  (d) {
	                return bu0(fn(d),2);
	            }
	        })(bu0Labels[b],formats[bu0Labels[b].slice(0,-1)])
	    }
	    function bu0(src,num) {
	        return (src+'').length < num ? ('0000'+src).slice(-num) : src;
	    }
	    return function  (date,options) {
	        date = date || new Date();
	        options = options || {};
	        var format = (typeof options == 'string') ? options :
	            options.format ? options.format :
	            defaultFormat;
	        // console.log(date,format)
	        return format.replace(dateReg,function  (mt) {
	            var res = formats[mt](date),todo = options[mt] || defaultStrings[mt],ok;
	            // console.log(mt,todo)
	            return todo ? 
	                typeof todo == 'function' ? todo(res) : todo[res] 
	                : res;
	            
	        })
	        
	    }
	}()
	//简单的“周几”获取
	var chnNumChar = ["一","二","三","四","五","六","七","八",];
	var numToChn = function(num){
	     return chnNumChar[num-1];
	}
	//简单每个月工作日的获取
	var workMonth=["31","28","29","30","31","28","31","30","28","30","31","29","31"]
	var workToMonth = function(num){
	     return workMonth[num];
	}
	//简答的季度最后一天获取
	var workToSeason = function(today){
		
		if(today.getMonth()<="3"){
			var addMonth=2-today.getMonth();
			var addDay=29-today.getDate()
			today.setMonth(today.getMonth()+addMonth);
			today.setDate(today.getDate()+addDay);
		}else if(today.getMonth()<="6"){
			var addMonth=5-today.getMonth();
			var addDay=28-today.getDate()
			today.setMonth(today.getMonth()+addMonth);
			today.setDate(today.getDate()+addDay);
			
		}else if(today.getMonth()<="9"){
			var addMonth=8-today.getMonth();
			var addDay=30-today.getDate()
			today.setMonth(today.getMonth()+addMonth);
			today.setDate(today.getDate()+addDay);
		}else{
			var addMonth=11-today.getMonth();
			var addDay=31-today.getDate()
			today.setMonth(today.getMonth()+addMonth);
			today.setDate(today.getDate()+addDay);
		}
		
	     return today;
	}```

相关时间的处理 :
天数的处理getDate()
月份的处理getMonth()
设置时间到某天
new Date().setMonth(xxx).setDate(xxx)
时间的加减:采用补齐的方法
var addMonth=2-today.getMonth();
var addDay=29-today.getDate()
today.setMonth(today.getMonth()+addMonth);
today.setDate(today.getDate()+addDay);
直接时间运算赋值会出BUG 计算后在赋值
today.setDate(today.getDate()+1);
startTime=today;
不要这样:
startTime=oday.setDate(today.getDate()+1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值