日期:2014-05-16  浏览次数:20331 次

javascript 根据时间判断周数?
开始的月是2007年12月3日
结束的月是2008年6月30日
输入一个月份的参数
返回结果是当前月所在总的周的列表,总周数为结束日期减开始日期
例如:
function get(12) //12为月
{
  return 1 2 3 4 5 //所在周数为1-5
}

------解决方案--------------------
HTML code

<script>
function TimeSpan(month,start,end){
    this.month=month;
    this.start=start;
    this.end=end;
    this.toString=function(){
        return this.month+"月,所在周数为:"+this.start+"-"+this.end;
    }
}
function get(month){
    var date,month_end;
    if(month==get.startDay.getMonth()+1){
        date=new Date(get.startDay);
    }
    if(month<get.startDay.getMonth()+1){
        date=new Date(get.startDay);
        date.setMonth(get.startDay.getMonth()+month);
        date.setDate(1);
    }else{
        date=new Date(get.startDay);
        date.setMonth(month-1);
        date.setDate(1);
    }
    month_end=new Date(date);
    month_end.setMonth(month_end.getMonth()+1);
    month_end.setDate(1);
    var a=date-get.startDay;
    var b=month_end-get.startDay;
    var spanA=a/1000/60/60/24/7;
    var spanB=b/1000/60/60/24/7;
    var ts=new TimeSpan();
    ts.month=date.getMonth()+1;
    ts.start=parseInt(spanA)+(spanA%1>0?1:0);
    ts.end=parseInt(spanB)+(spanB%1>0?1:0);
    if(month==get.startDay.getMonth()+1)ts.start++;
    
    return ts;
}
get.startDay=new Date(2007,11,3);//11其实就是指12月
get.endDay=new Date(2008,5,30);//5其实是指6月


/* 测试输出 */
document.write(get(12),"<br />");
for(var i=1;i<=6;i++){
    document.write(get(i),"<br />");
}
</script>

------解决方案--------------------
有bug,多加几行
HTML code

<script>
function TimeSpan(month,start,end){
    this.month=month;
    this.start=start;
    this.end=end;
    this.toString=function(){
        return this.month+"月,所在周数为:"+this.start+"-"+this.end;
    }
}
function get(month){
    var date,month_end;
    if(month==get.startDay.getMonth()+1){
        date=new Date(get.startDay);
    }
    if(month<get.startDay.getMonth()+1){
        date=new Date(get.startDay);
        date.setMonth(get.startDay.getMonth()+month);
        date.setDate(1);
    }else{
        date=new Date(get.startDay);
        date.setMonth(month-1);
        date.setDate(1);
    }
    month_end=new Date(date);
    month_end.setMonth(month_end.getMonth()+1);
    month_end.setDate(1);
    /* 多了这几行 必须的*/
    if(date.getMonth()==get.endDay.getMonth()){
        month_end=new Date(get.endDay);
        month_end.setDate(month_end.getDate()+1);
    }
    var a=date-get.startDay;
    var b=month_end-get.startDay;
    var spanA=a/1000/60/60/24/7;
    var spanB=b/1000/60/60/24/7;
    var ts=new TimeSpan();
    ts.month=date.getMonth()+1;
    ts.start=parseInt(spanA)+(spanA%1>0?1:0);
    ts.end=parseInt(spanB)+(spanB%1>0?1:0);
    if(month==get.startDay.getMonth()+1)ts.start++;
    
    return ts;
}
get.startDay=new Date(2007,11,3);//11其实就是指12月
get.endDay=new Date(2008,5,30);//5其实是指6月


/* 测试输出 */
document.write(get(12),"<br />");
for(var i=1;i<=6;i++){
    document.write(get(i),"<br />");
}
</script>

------解决方案--------------------
lz多修改一下开始个结束的2个期限。。多试下有没有错~~~
------解决方案--------------------
参考及效果演示http://www.515161.cn/515161/admins/js/date.html