早期写个一个算法,虽然写的不是很好,但挺有用的,拿出来分享一下
<!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>