以下函数,用来得到你所要的那个星期的第一天(星期天)
<script>
function getWeekStartDay(year,month,week){
var d=new Date(year,month-1,1);
d.setDate(d.getDate()-d.getDay()+week*7-7);
return d;
}
alert(getWeekStart(2007,10,1))
</script>

解决方案 »

  1.   

    <script>
    /* 用于输出结果的数据类型 */
    function weekDay(year,month,week,start,end){
        this.year=year;
        this.month=month;
        this.week=week;
        this.start=start;
        this.end=end;
        this.toString=function(){
            return year+"年"+month+"月第"+week+"个星期的第一天是"+this.start+"号,最后一天是"+this.end+"号";
        }
    }/* 根据年份和月份取得该月份的天数 */
    function getDaysByYearAndMonth(year,month){
        if(year%4==0&&month==2)return 29;
        var mDays=[31,28,31,30,31,30,31,31,30,31,30,31];
        return mDays[month-1];
    }
    /* 关键函数 */
    function getWeekDay(year,month,week){
        if(week<1)return null;
        var date=new Date(year,month-1,1);
        var fristWeekStartDay=date.getDay();
        var fristWeekend=7-fristWeekStartDay;
        if(week==1)return new weekDay(year,month,week,1,fristWeekend);    var vFristWeekStart=fristWeekend-6;
        var mDays=getDaysByYearAndMonth(year,month);
        var sDay=vFristWeekStart+(week-1)*7;
        if(sDay>mDays)return null;
        var eDay=sDay+6;
        eDay=eDay>mDays?mDays:eDay;
        return new weekDay(year,month,week,sDay,eDay);
    }/* 测试输出2007年所有星期 得到预期的效果 */
    for(var i=1;i<13;i++){
        for(var j=0;j<7;j++){
            var test=getWeekDay(2007,i,j);
            if(test!=null)document.write(test+"<br />");
        }
    }
    </script>2007年1月第1个星期的第一天是1号,最后一天是6号
    2007年1月第2个星期的第一天是7号,最后一天是13号
    2007年1月第3个星期的第一天是14号,最后一天是20号
    2007年1月第4个星期的第一天是21号,最后一天是27号
    2007年1月第5个星期的第一天是28号,最后一天是31号
    2007年2月第1个星期的第一天是1号,最后一天是3号
    2007年2月第2个星期的第一天是4号,最后一天是10号
    2007年2月第3个星期的第一天是11号,最后一天是17号
    2007年2月第4个星期的第一天是18号,最后一天是24号
    2007年2月第5个星期的第一天是25号,最后一天是28号
    2007年3月第1个星期的第一天是1号,最后一天是3号
    2007年3月第2个星期的第一天是4号,最后一天是10号
    2007年3月第3个星期的第一天是11号,最后一天是17号
    2007年3月第4个星期的第一天是18号,最后一天是24号
    2007年3月第5个星期的第一天是25号,最后一天是31号
    2007年4月第1个星期的第一天是1号,最后一天是7号
    2007年4月第2个星期的第一天是8号,最后一天是14号
    2007年4月第3个星期的第一天是15号,最后一天是21号
    2007年4月第4个星期的第一天是22号,最后一天是28号
    2007年4月第5个星期的第一天是29号,最后一天是30号
    2007年5月第1个星期的第一天是1号,最后一天是5号
    2007年5月第2个星期的第一天是6号,最后一天是12号
    2007年5月第3个星期的第一天是13号,最后一天是19号
    2007年5月第4个星期的第一天是20号,最后一天是26号
    2007年5月第5个星期的第一天是27号,最后一天是31号
    2007年6月第1个星期的第一天是1号,最后一天是2号
    2007年6月第2个星期的第一天是3号,最后一天是9号
    2007年6月第3个星期的第一天是10号,最后一天是16号
    2007年6月第4个星期的第一天是17号,最后一天是23号
    2007年6月第5个星期的第一天是24号,最后一天是30号
    2007年7月第1个星期的第一天是1号,最后一天是7号
    2007年7月第2个星期的第一天是8号,最后一天是14号
    2007年7月第3个星期的第一天是15号,最后一天是21号
    2007年7月第4个星期的第一天是22号,最后一天是28号
    2007年7月第5个星期的第一天是29号,最后一天是31号
    2007年8月第1个星期的第一天是1号,最后一天是4号
    2007年8月第2个星期的第一天是5号,最后一天是11号
    2007年8月第3个星期的第一天是12号,最后一天是18号
    2007年8月第4个星期的第一天是19号,最后一天是25号
    2007年8月第5个星期的第一天是26号,最后一天是31号
    2007年9月第1个星期的第一天是1号,最后一天是1号
    2007年9月第2个星期的第一天是2号,最后一天是8号
    2007年9月第3个星期的第一天是9号,最后一天是15号
    2007年9月第4个星期的第一天是16号,最后一天是22号
    2007年9月第5个星期的第一天是23号,最后一天是29号
    2007年9月第6个星期的第一天是30号,最后一天是30号
    2007年10月第1个星期的第一天是1号,最后一天是6号
    2007年10月第2个星期的第一天是7号,最后一天是13号
    2007年10月第3个星期的第一天是14号,最后一天是20号
    2007年10月第4个星期的第一天是21号,最后一天是27号
    2007年10月第5个星期的第一天是28号,最后一天是31号
    2007年11月第1个星期的第一天是1号,最后一天是3号
    2007年11月第2个星期的第一天是4号,最后一天是10号
    2007年11月第3个星期的第一天是11号,最后一天是17号
    2007年11月第4个星期的第一天是18号,最后一天是24号
    2007年11月第5个星期的第一天是25号,最后一天是30号
    2007年12月第1个星期的第一天是1号,最后一天是1号
    2007年12月第2个星期的第一天是2号,最后一天是8号
    2007年12月第3个星期的第一天是9号,最后一天是15号
    2007年12月第4个星期的第一天是16号,最后一天是22号
    2007年12月第5个星期的第一天是23号,最后一天是29号
    2007年12月第6个星期的第一天是30号,最后一天是31号
      

  2.   

    /* 根据年份和月份取得该月份的天数 */ 
    function getDaysByYearAndMonth(year,month){ 
        if(year%4==0&&month==2)return 29; 
        var mDays=[31,28,31,30,31,30,31,31,30,31,30,31]; 
        return mDays[month-1]; 
    } -------
    这个函数不对,2100是平年,而不是闰年,
    可以用这个:
    ---->>>>function getDaysByYearAndMonth(year,month){ 
        return (new Date(year,month)).getDate();
      

  3.   

    function getDaysByYearAndMonth(year,month){  
        return (new Date(year,month,0)).getDate(); 
      

  4.   

    getDate()还能这样用啊~呵呵~~虽然以前也有教过计算闰年的方法~~可不是4年一闰吗?为什么到了2100年就得除以400呢~~~真是奇怪了~~~
      

  5.   

    Visual C++6.0下运行.基本可以运行,能够达到目的.
    #include <stdio.h>
    void printmonth(int m);     /*函数声明*/
    void printhead(int m);      /*函数声明*/
    int daysofmonth(int m);     /*函数声明*/
    int isleap(int y);          /*函数声明*/
    int firstday(int y);        /*函数声明*/
    int year,weekday,m;           /*外部变量定义*/
    main()
    {
    int i;
    printf("输入年份:");
    scanf("%d",&year);
    printf("输入月份:");
    scanf("%d",&m);
    weekday=firstday(year); /*weekday为year年份元月一日的星期号*/
    printf("\n\n");
    printf("                %d年\n",year);/*17个空格*/
    printmonth(m);
    printf("\n");
    printf("\n\n");
    }void printmonth(int m)
    {
    int i,days;
    printhead(m);
    days=daysofmonth(m);
    for (i=1;i<=days;i++)
    {
    printf("%5d",i);
    weekday=(weekday+1)%7;
    if (weekday==0)        /*打印下一个之前是否换行*/
    {
    printf("\n   ");   /*3个空格*/
    }
    }
    }
    void printhead(int m)
    {
    int i;
    printf("\n%d月   日   一   二   三   四   五   六\n",m);
    printf("   ");            /*3个空格*/
    for (i=0;i<weekday;i++)
    printf("     ");      /*5个空格*/
    }
    int daysofmonth(int m)   /*返回year年m月的天数*/
    {
    switch(m)
    {
    case 1: 
    case 3: 
    case 5: 
    case 7: 
    case 8: 
    case 10: 
    case 12:return 31; 
    case 4: 
    case 6: 
    case 9: 
    case 11:return 30; 
    case 2:if (isleap(year))
       return 29; 
            else
    return 28; 
    }
    return 0;
    }
    int isleap(int y)   /*判断y年是否为闰年*/
    {
    return ((y%4==0 && y%100!=0) || y%400==0);
    }
    int firstday(int y)   /*从公元第1天为星期天算出y年第1天是星期几*/
    {
    long n=y*365;
    int  i;
    for (i=1;i<y;i++)   /*补上所有的闰年的天数*/
    n+=isleap(i);
    return n%7;
    }