我现在遇到一个问题。就是我在页面上写上
比如: 2009年  15周
想要转换成 第15周的星期一,格式为2009-4-29 。。的js
有人写过吗??
求教了~!或者给个思路,不知道周数是怎么定义的。。

解决方案 »

  1.   

    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.convertWeekNumberToFirstDate.html</title>
      <meta name="generator" content="editplus" />
      <meta name="author" content="[email protected]" />
      <meta name="keywords" content="" />
      <meta name="description" content="" />
     </head> <body>
      <select id="sltYear"></select>
      <select id="sltWeek"></select>
      <span id="spnDate"></span>
      <script type="text/javascript">
      <!--
    $ = document.getElementById;
    var oYear = $("sltYear");
    var oWeek = $("sltWeek");
    var oDate = $("spnDate");for (var i=(new Date()).getFullYear(); i>=1900; i--)
    {
    oYear.add(new Option(i+"年", i));
    }
    for (var i=1; i<=52; i++)
    {
    oWeek.add(new Option(i+"周", i));
    }
    /*
     * sYear: string, 年份;
     * sWeek: string, 周数;
     * startFromFirstMonday: boolean, 是否从每年第一天开始计算周数,
     * true: 从每年第一天开始计算周数;false: 从每年第一个周一开始计算周数。
     */
    function convertWeekNumberToFirstDate(sYear, sWeek, startFromFirstMonday)
    {
    if (startFromFirstMonday == undefined) startFromFirstMonday = true; var weekIndex = 1; var year = parseInt(sYear);
    var week = parseInt(sWeek); var i = 1;
    var dFirstDate = new Date(year, 0, i); if (!startFromFirstMonday)
    {
    if (weekIndex < week)
    {
    weekIndex++;
    }
    else
    return dFirstDate;
    } if (dFirstDate.getDay() != 1)
    {
    i += 7 - dFirstDate.getDay() + 1;
    dFirstDate.setFullYear(year, 0, i);
    } if (weekIndex < week)
    {
    i += 7*(week-weekIndex);
    dFirstDate.setFullYear(year, 0, i);
    } return dFirstDate;
    }function displayDate()
    {
    var dFirstDate = convertWeekNumberToFirstDate(oYear.value, oWeek.value);
    oDate.innerHTML = dFirstDate.getFullYear()+"-"+(dFirstDate.getMonth()+1)+"-"+dFirstDate.getDate();
    }displayDate();
    oYear.onchange = oWeek.onchange = displayDate;  //-->
      </script>
     </body>
    </html>
      

  2.   

      
      <SCRIPT   LANGUAGE="JavaScript">  
      <!-- 
      function   mm(theyear,weekcount)   
      {   
              var   year   =   theyear;   
              var   week   =   weekcount;   
              if(year==""   ||   week=="")   return;   
        
              var   d   =   new   Date(year,   0,   1);   
              d.setDate(parseInt("1065432".charAt(d.getDay()))   +   week   *   7);   
              var   fe   =   getFirstAndEnd(d);   
              return fe.first.format("yyyy-MM-dd");    
      }   
        
        
        
        
      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;   
      };   
      Date.prototype.format   =   function(format)   
      {   
          var   o   =   {   
              "M+"   :   this.getMonth()+1,   //month   
              "d+"   :   this.getDate(),         //day   
              "h+"   :   this.getHours(),       //hour   
              "m+"   :   this.getMinutes(),   //minute   
              "s+"   :   this.getSeconds(),   //second   
              "q+"   :   Math.floor((this.getMonth()+3)/3),     //quarter   
              "S"   :   this.getMilliseconds()   //millisecond   
          }   
          if(/(y+)/.test(format))   format=format.replace(RegExp.$1,   
              (this.getFullYear()+"").substr(4   -   RegExp.$1.length));   
          for(var   k   in   o)if(new   RegExp("("+   k   +")").test(format))   
              format   =   format.replace(RegExp.$1,   
                  RegExp.$1.length==1   ?   o[k]   :     
                      ("00"+   o[k]).substr((""+   o[k]).length));   
          return   format;   
      };   
        
      function   getFirstAndEnd(d)   
      {   
          var   w   =   d.getDay(),   n   =   24*60*60*1000;   
          var   first   =   new   Date(d.getTime()   -   parseInt("6012345".charAt(w))*n);   
          var   end   =   new   Date(d.getTime()   +   parseInt("0654321".charAt(w))*n);   
          return   {first:   first,   end:   end};   
      }   
      //-->   
      </SCRIPT>我也找了一个,贴给大家看看。。楼上的一会我试试。明天就结贴了。
      

  3.   


    <html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>周数转换成日期</title>
    </head><body>
    <script language="vbscript">
    <!--
    function getData(y,w)
    Dim NewDate,NewWeekDay,firstDay,ThisDate
    NewDate = DateAdd("ww", w, "1-1-"&y)'2009-4-16。
    NewWeekDay = Weekday(NewDate) '5(四)
    firstDay=NewWeekDay-2
    ThisDate = DateAdd("d",-firstDay ,NewDate)
    getData=ThisDate&"(星期一) "
    end function
    -->
    </script><script language="javascript">
    <!--
    function sentData(){
    var v_y=parseInt(document.getElementById("my_year").value)
    var v_w=parseInt(document.getElementById("my_week").value)
    document.getElementById("my_data").value=getData(v_y,v_w)
    }
    onload=sentData
    //-->
    </script>
    <select id="my_year" onchange="javascript:sentData()">
    <option value="2015">2015年</option>
    <option value="2014">2014年</option>
    <option value="2013">2013年</option>
    <option value="2012">2012年</option>
    <option value="2011">2011年</option>
    <option value="2010">2010年</option>
    <option value="2009" selected>2009年</option>
    <option value="2008">2008年</option>
    <option value="2007">2007年</option>
    <option value="2006">2006年</option>
    <option value="2005">2005年</option>
    </select>
    <select id="my_week" onchange="javascript:sentData()">
    <option value="1">1周</option>
    <option value="2">2周</option>
    <option value="3">3周</option>
    <option value="4">4周</option>
    <option value="5">5周</option>
    <option value="6">6周</option>
    <option value="7">7周</option>
    <option value="8">8周</option>
    <option value="9">9周</option>
    <option value="10">10周</option>
    <option value="11">11周</option>
    <option value="12">12周</option>
    <option value="13">13周</option>
    <option value="14">14周</option>
    <option value="15" selected>15周</option>
    <option value="16">16周</option>
    <option value="17">17周</option>
    <option value="18">18周</option>
    <option value="19">19周</option>
    <option value="20">20周</option>
    </select>
    <input id=my_data></body></html>
      

  4.   

    要注意的地方,该年最大周次:1.1.在周一到周四,则为该年第一周,否则为上年最后一周.
    下面是我很久前写的了,提供出来参考一下,代码可能有点乱<HTML><HEAD>
    <script type="text/javascript">//目前只判断了4位有效输入的年份,
    //日期输出格式已处理,统一为"yyyy-mm-dd"格式.
    <!--
    function checkInput(fieldValue,len){ //判断输入是否都为正确数据格式if(fieldValue.length < 0 || fieldValue.length > len)
    {
    alert("数据长度不对,请重新填写.年份为四位,如:2006;周次为1-2位,如1或01");
    return false;
    }
    else
    {
    for(var i = 0 ; i < fieldValue.length; i++ )
    {
    temp = fieldValue.substr(i,1)
    if(isNaN(temp)) 
    {
     alert("非法数据输入!只能输入数字,请重新输入.");
     return false; 
     }
    }
    var msg = false; //处理输入0/00时出现的问题.
    for(var i = 0 ; i < fieldValue.length; i++ )
    {

    tmp = fieldValue.substr(i,1)
    if(tmp != "0") { msg = true; }
    }
    }
    if (msg == false) {alert("非法数据输入,数据不能全部为'0',请重新输入.");return false;}

    }function calcu(){
    /*==================================================================================*/
    //年份特殊判断,目前只实现4为有效数字输入,有空再考虑2位有效数字输入.
    //4位可计算出1000--9999年间的任意时间,2位则暂时只计算1900-2099年(暂不设计)
    if(document.form1.thisYear.value.length != 4) 
    {
    alert("年份目前只能输入四位有效数字-_-! 请重新输入.");
    document.form1.thisYear.focus();
    return false;
    }
    /*==================================================================================*/
    if(document.form1.thisYear.value.charAt(0) == "0")
    {
    alert("年份第一位不能为'0',请重新输入.");
    document.form1.thisYear.focus();
    return false;
    }
    //-------------------------------------------------------------------------------------
    //判断年份输入是否合法.
    if (checkInput(document.form1.thisYear.value,4) == false) { return false; }
    //判断周次输入是否合法.
    if (checkInput(document.form1.thisWeek.value,2) == false) { return false; }
    //------------------------------------------------------------------------------------- var yearStart = new Date(parseInt(document.form1.thisYear.value),0,1) //设置该年1.1.
    var firstDay = yearStart.getDay(); //星期
    var yearEnd = new Date(parseInt(document.form1.thisYear.value),11,31) //设置该年12.31.
    var endDay = yearEnd.getDay(); //星期
    //-------------------------------------------------------------------------------------
    //判断输入是否超过最大周次.
    var maxWeek; //该年最大周次.1.1.在周一到周四,则为该年第一周,否则为上年最后一周.
    if((firstDay>=1&&firstDay<=4)&&(endDay==0||endDay==4||endDay==5||endDay==6))
    {
    maxWeek = 53; //1.1.和12.31.都在本年,则该年有53周,否则52周
    }
    else
    {
    maxWeek = 52;
    }
    if(parseInt(document.form1.thisWeek.value,10) > maxWeek)
    {
    alert(document.form1.thisYear.value + " 年只有 " + maxWeek + " 周,请重新填写周次.");
    document.form1.thisWeek.focus();
    return false;
    }
    //-------------------------------------------------------------------------------------//-------------------------------------------------------------------------------------
    //对1.1.所在周的前后几天特殊处理.
    if(firstDay>=0&&firstDay<=4)  {other = firstDay - 1;}
    else {other = firstDay - 8}
    //-------------------------------------------------------------------------------------

    //-------------------------------------------------------------------------------------
    //时间调整,得出要计算周的起/始时间.
    //距离当年1.1.的总天数
    days = (parseInt(document.form1.thisWeek.value,10)-1)*7 - other;
    //转换成Ms.......
    var oneMinute = 60 * 1000;
    var oneHour = oneMinute * 60;
    var oneDay = oneHour * 24;
    //1.1.至1/1/70的毫秒数
    var dateInMs = yearStart.getTime();
    //当前所选周第一天离1/1/70的毫秒数.
    dateInMs += oneDay * days
    //日期调整(设置1/1/70至今的毫秒数)
    yearStart.setTime(dateInMs);
    //当前所选周最后一天处理,同上.
    var weekEnd = new Date(parseInt(document.form1.thisYear.value),0,1)
    var dateInMs1 = weekEnd.getTime ();
    dateInMs1 += oneDay * (days + 6);
    weekEnd.setTime(dateInMs1)
    //-------------------------------------------------------------------------------------//-------------------------------------------------------------------------------------
    //月和日的处理,一位变两位,如:1->01.
    var month = yearStart.getMonth() + 1
    if(month<10) { month = "0" + month;}
    var day = yearStart.getDate();
    if(day<10) { day = "0" + day;}
    var month1 = weekEnd.getMonth() + 1;
    if(month1<10) { month1 = "0" + month1;}
    var  day1 = weekEnd.getDate();
    if(day1<10) { day1 = "0" + day1;}
    //-------------------------------------------------------------------------------------

    //-------------------------------------------------------------------------------------
    //赋值给text框显示.
    document.form1.weekTime.value = yearStart.getFullYear() + "-" + month + "-" + day;
    document.form1.weekend.value = weekEnd.getFullYear() + "-" + month1 + "-" + day1;
    //-------------------------------------------------------------------------------------
    }//-->
    </script>
    </HEAD>
    <BODY>
    <form name = "form1">
    <P>
    <font size=2 color="blue">输入年份/周次,点"计算",程序将自动计算出该年该周次的时间段:</font><br><br><font size=2 color="red">年&nbsp;&nbsp;份:<input name = "thisYear"  >&nbsp;&nbsp;//填写四位格式的年份,如:2006</font><br>
    <font size=2 color="red">周&nbsp;&nbsp;次:<input name = "thisWeek"  >&nbsp;&nbsp;//填写要计算的周次,如1或01</font><br>
    <font size=2 color="red">时间段:<input name = "weekTime"  >至<input name = "weekend"  >&nbsp;&nbsp;//不需要填写,程序将自动计算</font><br><br>
    <input type = "button" name = "btn" value = "计算" onclick = "calcu()">
    <input type = "reset" name = "reset" value = "重置"> </P>
    </form>
    </BODY></HTML>