当前位置: 代码迷 >> JavaScript >> 计算日期替当年的第几周(javascript)
  详细解决方案

计算日期替当年的第几周(javascript)

热度:118   发布时间:2012-11-22 00:16:41.0
计算日期为当年的第几周(javascript)
早期写个一个算法,虽然写的不是很好,但挺有用的,拿出来分享一下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题 1</title>
<script type="text/javascript">

function shipweek(datestr)
{
var datestr=datestr;

var strdate=datestr.split(" ")[0];
strdate=strtodateline(strdate);
var shipweek;
var numdate=strdate.getTime();
var nowyear=strdate.getYear();
var firstday=new Date(nowyear,0,1);

if((firstday.getDay()<5)&(firstday.getDay()!=0)){
firstday.setTime(firstday.getTime()-firstday.getDay()*24*60*60*1000);}
else{ if(firstday.getDay()==0){firstday.setTime(firstday.getTime()+0*24*60*60*1000);}
else{firstday.setTime(firstday.getTime()+(7-firstday.getDay())*24*60*60*1000);}
}
var lastday=new Date(nowyear,11,31);

var weeknum=Math.ceil((strdate.getTime()-firstday.getTime())/(7*24*60*60*1000));

if((weeknum<10)&(weeknum!=0)){shipweek="Y"+nowyear+"W0"+weeknum;}
else{shipweek="Y"+nowyear+"W"+weeknum;}


if(weeknum == 0){

   if(shipweek2((nowyear-1)+"-"+12+"-"+31)==53){
    if(strdate.getMonth()==0){
    shipweek="Y"+eval(nowyear-1)+"W53";
    }else
    {
    shipweek="Y"+nowyear+"W53";
    }
    }
   else{
    if(strdate.getMonth()==0){
    shipweek="Y"+eval(nowyear-1)+"W52";
    }else{
    shipweek="Y"+nowyear+"W52";
    }
    }
   }

if(weeknum>52){

if(lastday.getDay()>3){
   weeknum=53;
   if(strdate.getMonth()==0){
   shipweek="Y"+eval(nowyear-1)+"W"+weeknum;
    }
   else{
   shipweek="Y"+nowyear+"W"+weeknum;
    }
 
   }
else{
   shipweek="Y"+eval(nowyear+1)+"W01";
   }

}


return shipweek;

}

function shipweek2(datestr)
{
var datestr=datestr;
var strdate=datestr;
strdate=strtodateline(strdate);

var shipweek;
var numdate=strdate.getTime();
var nowyear=strdate.getYear();
var firstday=new Date(nowyear,0,1);

if((firstday.getDay()<5)&(firstday.getDay()!=0)){
firstday.setTime(firstday.getTime()-firstday.getDay()*24*60*60*1000);}
else{firstday.setTime(firstday.getTime()+(7-firstday.getDay())*24*60*60*1000);}


var lastday=new Date(nowyear,11,31);

var weeknum=Math.ceil((strdate.getTime()-firstday.getTime())/(7*24*60*60*1000));

if((weeknum<10)&(weeknum!=0)){shipweek=weeknum;}
else{shipweek=weeknum;}

if(weeknum == 0){shipweek=53;}

if(weeknum>52){
if(lastday.getDay()>3){
   weeknum=53; 
   shipweek=weeknum;
   }
else{
   shipweek=1;
   }

}


return shipweek;

}


//***********************
function shipMonth(datestr)
{
var datestr=datestr;

var strdate=datestr.split(" ")[0];
strdate=strtodateline(strdate);
var shipweek;
var numdate=strdate.getTime();
var nowyear=strdate.getYear();
var nowmonth=strdate.getMonth();

var firstday=new Date(nowyear,nowmonth,1);


if((firstday.getDay()<5)&(firstday.getDay()!=0)){
firstday.setTime(firstday.getTime()-firstday.getDay()*24*60*60*1000);}
else{ if(firstday.getDay()==0){firstday.setTime(firstday.getTime()+0*24*60*60*1000);}
else{firstday.setTime(firstday.getTime()+(7-firstday.getDay())*24*60*60*1000);}
}

var lastday=new Date(nowyear,eval(nowmonth+1),0);

var weeknum=Math.ceil((strdate.getTime()-firstday.getTime())/(7*24*60*60*1000));
if(eval(nowmonth+1)<10){shipweek="M0"+eval(nowmonth+1)+"W"+weeknum;}
else{shipweek="M"+eval(nowmonth+1)+"W"+weeknum;}


if(nowmonth+1<10){anowmonth="0"+nowmonth;}
else{anowmonth=nowmonth+1;}


if((weeknum == 0)&(nowmonth != 0)){

var upstrdate= new Date(nowyear,nowmonth,0);

upstrdate=datetostring(upstrdate);

if(shipMonth2(upstrdate)==5){

    if(eval(nowmonth+1)<10){shipweek="M0"+eval(nowmonth+0)+"W5";}
    else{
     if(eval(nowmonth+1)==10){shipweek="M0"+eval(nowmonth+0)+"W5";}
     else{shipweek="M"+eval(nowmonth+0)+"W5";}
     }
    }
   else{
    if(strdate.getDay()==0){
     if(eval(nowmonth)<10){shipweek="M0"+eval(nowmonth)+"W4";}
     else{shipweek="M"+eval(nowmonth)+"W4";}
     }
     else{
     if(eval(nowmonth)<10){shipweek="M0"+eval(nowmonth)+"W4";}
     else{shipweek="M"+eval(nowmonth+1)+"W4";}
      }

    }

   }


if((weeknum == 0)&(nowmonth==0)){

var upstrdate= new Date(nowyear,nowmonth,0);

upstrdate=datetostring(upstrdate);

   if(shipMonth2(upstrdate)==5){

    if(eval(nowmonth+1)<10){
     if(nowmonth==0&&strdate.getDay<4){
     shipweek="M12W5";
     }
     else{
      shipweek="M12"+"W5";}
    }
    else{shipweek="M"+eval(nowmonth+1)+"W5";}
    }
   else{

    if(eval(nowmonth+1)<10){shipweek="M0"+eval(nowmonth+1)+"W4";}
    else{shipweek="M"+eval(nowmonth+1)+"W4";}

   }
   }


if(weeknum>4){
if(lastday.getDay()>3){

   weeknum=5;
   if(eval(nowmonth+1)<10){
    if(nowmonth==0&&strdate.getDay<4){
    shipweek="M12"+"W"+weeknum;
    }else{
    shipweek="M0"+eval(nowmonth+1)+"W"+weeknum;
     }
    }
   else{shipweek="M"+eval(nowmonth+1)+"W"+weeknum;}
   }
else{

   if(eval(nowmonth+1)<10){

     if(eval(nowmonth+2)<10){
      if(nowmonth==0&&strdate.getDay<4){
      shipweek="M12"+"W"+weeknum;
      }else{
  
      shipweek="M0"+eval(nowmonth+2)+"W1";}
      }
     else{

      shipweek="M"+eval(nowmonth+2)+"W1";}
   
     }
   else{

     if(eval(nowmonth+1)==12){
     shipweek="M01"+"W1";}
     else{
     shipweek="M"+eval(nowmonth+2)+"W1";
      }
    }
   }

}


return shipweek;

}

function shipMonth2(datestr)
{
var datestr=datestr;
var strdate=datestr;
strdate=strtodateline(strdate);

var shipweek;
var numdate=strdate.getTime();
var nowyear=strdate.getYear();
var nowmonth=strdate.getMonth();

var firstday=new Date(nowyear,nowmonth,1);

if((firstday.getDay()<5)&(firstday.getDay()!=0)){
firstday.setTime(firstday.getTime()-firstday.getDay()*24*60*60*1000);}
else{firstday.setTime(firstday.getTime()+(7-firstday.getDay())*24*60*60*1000);}
var lastday=new Date(nowyear,eval(nowmonth+1),0);

var weeknum=Math.ceil((strdate.getTime()-firstday.getTime())/(7*24*60*60*1000));

if((weeknum<10)&(weeknum!=0)){shipweek=weeknum;}
else{shipweek=weeknum;}

if(weeknum == 0){shipweek=5;}

if(weeknum>4){
if(lastday.getDay()>3){
   weeknum=5; 
   shipweek=weeknum;
   }
else{
   shipweek=1;
   }

}


return shipweek;

}

function strtodateline(str)
{
var str=str;
var year=parseInt("1"+str.split("-")[0])-10000;
var month=eval(parseInt("1"+str.split("-")[1])-1-100);
var day=parseInt("1"+str.split("-")[2])-100;
d = new Date(year,month,day);
return d;
}
document.write("2011-01-12"+":----:"+shipweek("2011-01-12"));
document.write("<br>");
document.write("2011-01-13"+":----:"+shipweek("2011-01-13"));
document.write("<br>");
document.write("2011-01-14"+":----:"+shipweek("2011-01-14"));
document.write("<br>");
document.write("2011-02-12"+":----:"+shipweek("2011-02-12"));
document.write("<br>");
document.write("2011-02-13"+":----:"+shipweek("2011-02-13"));
document.write("<br>");
document.write("2011-02-14"+":----:"+shipweek("2011-02-14"));

</script>
</head>

<body>

</body>

</html>

  相关解决方案