A method is to work with ISOweeks numbers
<script language="javascript" type="text/javascript">
Date.prototype.getISOWeek = function() {var i,d,firstWeekMonday;
var i=1;while (new Date(this.getFullYear(),0,i).getDay()!=4) ++i;// i the first Thursday;
var firstWeekMonday = new Date(this.getFullYear(),0,i-3,0,0,0,-1);// one millisecond before
d=Math.ceil(((this-firstWeekMonday)/60000-this.getTimezoneOffset()+firstWeekMonday.getTimezoneOffset())/(1440*7));
if (d==53 && new Date(this.getFullYear(),0,1).getDay()!=4 && new Date(this.getFullYear()+1,0,0).getDay()!=4) d=1;
return d?d:new Date(this.getFullYear(),0,0).getISOWeek();// the week of the 31 December before if d is null !
}
year=2012;
var i,d,c='<p>';
d=1;while (new Date(year,0,d).getDay()!=1) --d;
for (i=d-7;i<15000;i+=7) {
d=new Date(year,0,i,0,30,0);e=new Date(year,0,i,0,-30,0);
c+=d.toLocaleString()+' <b>Week '+d.getISOWeek()+'</b> after '+e.toLocaleString()+' <b> Week '+e.getISOWeek()+'</b><br>';}
document.getElementById('rsp').innerHTML=c;
var tdy=new Date();
alert(tdy.getISOWeek())
</script>
But take care. There is many bad script on the web about this question !