Date.prototype.getWeekNumber = function() {
var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
var DoW = d.getDay();
d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
var ms = d.valueOf(); // GMT
d.setMonth(0);
d.setDate(4); // Thu in Week 1
return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
}在网上找了个函数库,你看看

解决方案 »

  1.   

    我测试过了,周是从第0周开始的,你要从1开始就自己加个1
    <html>
    <body>
    <select id="year">
    <option value="0">请选择年</option>
    </select>
    <select id="month" onchange="AddWeek();">
    <option value="0">请选择月份</option>
    </select>
    <select id="week">
    <option >请选择周</option>
    </select>
    </body>
    </html>
    <script>
        window.onload=function(){
        var sel_month = document.getElementById("month");
        for(var mon=1;mon<=12;mon++)
        {
            var op = new Option();
            op.value = mon;
            op.innerHTML = mon + "月";
            sel_month.appendChild(op);
        }
        
        var sel_year = document.getElementById("year");
        for(var mon=2009;mon<=2020;mon++)
        {
            var op = new Option();
            op.value = mon;
            op.innerHTML = mon + "年";
            sel_year.appendChild(op);
        }
    };Date.prototype.getWeek = function(flag) 

        var   first   =   new   Date(this.getFullYear(),   0,   1); 
        var   n   =   parseInt( "1065432 ".charAt(first.getDay())); 
        n   =   this.getTime()-first.getTime()-n*24*60*60*1000; 
        n   =   Math.ceil(n/(7*24*60*60*1000)); 
        return   (flag==true&&first.getDay()!=1)?(n+1):n; 
    }; function AddWeek()
    {
        var sel_week = document.getElementById("week");
        sel_week.innerHTML="<option >请选择周</option>";
        var theMonth = parseInt(document.getElementById("month").value);
        var theYear = parseInt(document.getElementById("year").value);
        
        theDate = new Date(theMonth+'/01/'+theYear);
        var minWeek = theDate.getWeek();
        nextDate = new Date((theMonth+1)+'/01/'+theYear);
        var maxWeek;
        
        if(theMonth != 12)
        {
            if(nextDate.getDay()==1)
            {
                maxWeek = nextDate.getWeek() - 1;
            }
            else
            {
                maxWeek = nextDate.getWeek();
            }
        }
        else
        {
            maxWeek = new Date("12/31/"+theYear).getWeek();
        }
        
        
        for(var i=minWeek;i<=maxWeek;i++)
        {
            var op = new Option();
            op.value = i;
            op.innerHTML = "第" + i + "周";
            sel_week.appendChild(op);
        }
    }
    </script>
      

  2.   

    肯定是copy来滴代码,getWeek(flag) 的 flag 标志控制当第一天不是周一时是否将该周计为第一周,
    true 就从 1 开始计,即 getWeek(true);
    false 或 不填 就计为 0。
      

  3.   

    这个不错啊,测了下挺好用的
    /*
     * 返回日期是一年中的第几周,index from 1
     * 从周一到周日算一周
     * eg: 2009/1/1 周四 第一周
     *     2009/3/1 周日 第9九周,属于2/23——3/1日的全年第九周
     */
      

  4.   

    方法比较笨,一天一天算,哈
    L@_@K
    <!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>
      <title>js.Date.weekIndex.html</title>
      <meta name="generator" content="editplus" />
      <meta name="author" content="[email protected]" />
      <meta name="keywords" content="js dhtml csdn" />
      <meta name="description" content="for csdn.net" />
     </head> <body>
    <h3>周一为每周第一天,周日为每周最后一天。</h3>
    <select id="selYear" size="1">
    <option value="2008" selected>2008</option>
    <option value="2009">2009</option>
    <option value="2010">2010</option>
    </select>
    <select id="selMonth" size="1">
    </select>
    <select id="selWeek" size="1">
    </select>  <script type="text/javascript">
      <!--
    function $(sId)
    {
    return document.getElementById(sId);
    }
    function clearOptions(oSelect)
    {
    for (var i=oSelect.options.length-1; i>=0; i--)
    {
    oSelect.options.remove(i);
    }
    }
    function setMonthOptions(oMonth)
    {
    for (var i=0; i<12; i++)
    {
    oMonth.options.add(new Option((i+1)+"月", i));
    }
    }
    function getDateWeekIndexMapping(dateWeekIndexMapping, yearNumber)
    {
    var i = 1;
    var aDate = new Date(yearNumber, 0, i); if (dateWeekIndexMapping[aDate]==null)
    {
    var weekIndex = 1;
    if (aDate.getDay()==1) weekIndex = 0; while (aDate.getFullYear()==oYear.value)
    {
    if (aDate.getDay()==1) weekIndex++;
    dateWeekIndexMapping[aDate] = weekIndex;
    aDate = new Date(yearNumber, 0, ++i);
    }
    }
    }
    function setWeekIndexOptions(dateWeekIndexMapping, oWeek, yearNumber, monthNumber)
    {
    clearOptions(oWeek);
    var i = 1;
    var aDate = new Date(yearNumber, monthNumber, i);
    var weekIndex;
    while (aDate.getMonth()==monthNumber)
    {
    if (weekIndex != dateWeekIndexMapping[aDate])
    {
    weekIndex = dateWeekIndexMapping[aDate];
    oWeek.options.add(new Option("第"+weekIndex+"周", weekIndex));
    }
    aDate = new Date(yearNumber, monthNumber, ++i);
    }
    }var oYear = $("selYear");
    var oMonth = $("selMonth");
    var oWeek = $("selWeek");setMonthOptions(oMonth);var dateWeekIndexMapping = new Object();getDateWeekIndexMapping(dateWeekIndexMapping, oYear.value);setWeekIndexOptions(dateWeekIndexMapping, oWeek, oYear.value, oMonth.value);oYear.onchange = function() {
    getDateWeekIndexMapping(dateWeekIndexMapping, this.value);
    setWeekIndexOptions(dateWeekIndexMapping, oWeek, this.value, oMonth.value);
    };oMonth.onchange = function() {
    setWeekIndexOptions(dateWeekIndexMapping, oWeek, oYear.value, this.value);
    };  //-->
      </script>
     </body>
    </html>
      

  5.   

    把我在你在前发的贴子小改一下就可以了
    <script >
    //y:年 m:月 return array
    function getWeeks(y,m)
    {
         var d1 = new Date(y,0,1);
         var fd = new Date(y,m-1,1)
         var fday = d1.getDay();
         var fwd = 7-fday;
         var weeks = 1;
         var weekSet = [];
         d1.setDate(fwd);
         while(d1<=new Date(y,m,1))
         {
             d1.setDate(d1.getDate()+7);
             if(d1.getMonth()!=m || (d1.getMonth()==m && d1.getDate()<7))
             {
                weeks++;
                if(d1.getMonth()>=m-1)
                {
                    weekSet.push(weeks);
                }
             }
             
         }
         return weekSet;
         
    }
    //y:年 m:月 void
    function eChangeDate(y,m)
    {
        var weeks = getWeeks(y,m);
        var selMonth = document.getElementById("sWeek");
        for(var i=0;i<weeks.length;i++)
        {
            selMonth.options.add(new Option("第"+weeks[i]+"周",weeks[i]));
        }
    }
    window.onload=function(){eChangeDate(2009,5)}
    </script>
    <select id="sWeek">
    </select>
      

  6.   

    <script >
    //y:年 m:月 return weekSet[]
    function getWeeks(y,m){
         var d1 = new Date(y,0,1);
         var fd = new Date(y,m-1,1)
         var fday = d1.getDay();
         var fwd = 7-fday;
         var weeks = 1;
         var weekSet = m==1?[1]:[];
         var t;
         d1.setDate(fwd);
         
         while(d1<=new Date(y,m,1)){
             d1.setDate(d1.getDate()+7);
             t = d1.getMonth();
             if(t!=m || (t==m && d1.getDate()<7)){
                ++weeks;
                if(t>=m-1){
                     weekSet.push(weeks);
                    
                }
             }
         }
         return weekSet;
         
    }
    //y:年 m:月 void
    function eChangeDate(y,m){
       
        var weeks = getWeeks(y,m);
        var sWeek = document.getElementById("sWeek");
        sWeek.options.length=0;
        for(var i=0;i<weeks.length;i++){
            sWeek.options.add(new Option("第"+weeks[i]+"周",weeks[i]));
        }
    }window.onload=function(){
        var sYear = document.getElementById("sYear");
        var sMonth = document.getElementById("sMonth");
        sYear.options.add(new Option('年',0));
        for(var i=2005;i<2020;i++){
            sYear.options.add(new Option(i,i));
        }
        
        for(var i=1;i<12;i++){
            sMonth.options.add(new Option(i,i));
        }
        
        sMonth.onchange=function(){eChangeDate(sYear.value,sMonth.value)}
        sYear.onchange=function(){eChangeDate(sYear.value,sMonth.value)}
    }
    </script>
    <select id="sYear">
    </select>
    <select id="sMonth">
    </select>
    <select id="sWeek">
    </select>
      

  7.   

    上面小改 
    for(var i=1;i<13;i++){
            sMonth.options.add(new Option(i,i));
        }
    显示12个月,我测了一下没问题,LZ可以测试了一下
      

  8.   

    整理一下重发
    <script >
    //y:年 m:月 return weekSet[]
    function getWeeks(y,m){
         var d1 = new Date(y,0,1);
         var fd = new Date(y,m-1,1)
         var fday = d1.getDay();
         var fwd = 7-fday;
         var weeks = 1;
         var weekSet = m==1?[1]:[];
         var t;
         d1.setDate(fwd);
         
         while(d1<=new Date(y,m,1)){
             d1.setDate(d1.getDate()+7);
             t = d1.getMonth();
             if(t!=m || (t==m && d1.getDate()<7)){
                ++weeks;
                
                if(t>=m-1 || d1.getYear()==parseInt(y)+1){
                    
                     weekSet.push(weeks);
                }
             }
         }
         return weekSet;
         
    }
    //y:年 m:月 void
    function eChangeDate(y,m){
       
        var weeks = getWeeks(y,m);
        var sWeek = document.getElementById("sWeek");
        sWeek.options.length=0;
        for(var i=0;i<weeks.length;i++){
            sWeek.options.add(new Option("第"+weeks[i]+"周",weeks[i]));
        }
    }window.onload=function(){
        var sYear = document.getElementById("sYear");
        var sMonth = document.getElementById("sMonth");
        sYear.options.add(new Option('年',0));
        for(var i=2005;i<2020;i++){
            sYear.options.add(new Option(i,i));
        }
        
        for(var i=1;i<13;i++){
            sMonth.options.add(new Option(i,i));
        }
        
        sMonth.onchange=function(){eChangeDate(sYear.value,sMonth.value)}
        sYear.onchange=function(){eChangeDate(sYear.value,sMonth.value)}
        var d = new Date();
        sYear.value = d.getYear();
        sMonth.value = d.getMonth()+1;
        eChangeDate(sYear.value,sMonth.value);
    }
    </script>
    <select id="sYear">
    </select>
    <select id="sMonth">
    </select>
    <select id="sWeek">
    </select>
      

  9.   

    跨年没处理好,12月测试有点问题,改一下
    function getWeeks(y,m){
         var d1 = new Date(y,0,1);
         var fd = new Date(y,m-1,1)
         var fday = d1.getDay();
         var fwd = 7-fday;
         var weeks = 1;
         var weekSet = m==1?[1]:[];
         var t;
         d1.setDate(fwd);
         
         while(d1<=new Date(y,m,1)){
             d1.setDate(d1.getDate()+7);
             t = d1.getMonth();
             if(t!=m || (t==m && d1.getDate()<7)){
                ++weeks;
                if(t>=m-1 || (d1.getYear()==parseInt(y)+1 && d1.getDate()!=7)){ //后面的条件针对跨年做处理               
                     weekSet.push(weeks);
                }
             }
         }
         return weekSet;
         
    }