输入参数:年份,第几周。返回参数:该周起始月日。比如:输入参数 年份2012 ,第2周。返回参数 1月8日 到 1月14日
求实现上述功能的函数。

解决方案 »

  1.   

    第一周和最后一周怎么算?下面的代码只包括当年的日期。如果需要包括前一年/后一年的日期,稍微修改一下也不难        function getStartDateByWeek(year, week) {
                var startDate = new Date();
                startDate.setFullYear(year, 0, 1); //变态的js月份从0开始
                var dayOfWeek = startDate.getDay();
                var count = 0;
                var weekCount = 1;
                if (weekCount === week) {
                    return startDate;
                }
                else {
                    while (weekCount !== week) {
                        startDate.setDate(startDate.getDate() + 7);
                        weekCount++;
                    }
                    while (dayOfWeek > 0) {
                        startDate.setDate(startDate.getDate() - 1);
                        dayOfWeek = startDate.getDay();
                    }
                }
                return startDate;
            }
    得到了开始日期,结束日期只要+6就行了:        function getEndDate(startDate, year) {
                var endDate = new Date(startDate);
                if (startDate.getMonth() === 11 && startDate.getDate() > 25) {
                    endDate.setFullYear(year, 11, 31);
                }
                else {
                    endDate.setDate(startDate.getDate() + 6);
                }
                return endDate;
            }
    如果需要包括前一年/后一年的日期,上面的代码稍微修改一下:        function getStartDateByWeek(year, week) {
                var startDate = new Date();
                startDate.setFullYear(year, 0, 1); //变态的js月份从0开始
                var dayOfWeek = startDate.getDay();
                var count = 0;
                var weekCount = 1;
                if (weekCount === week) {
                    startDate.setFullYear(year - 1, 11, 31);
                    dayOfWeek = startDate.getDay();
                    while (dayOfWeek > 0) {
                        startDate.setDate(startDate.getDate() - 1);
                        dayOfWeek = startDate.getDay();
                    }
                }
                else {
                    while (weekCount !== week) {
                        startDate.setDate(startDate.getDate() + 7);
                        weekCount++;
                    }
                    while (dayOfWeek > 0) {
                        startDate.setDate(startDate.getDate() - 1);
                        dayOfWeek = startDate.getDay();
                    }
                }
                return startDate;
            }        function getEndDate(startDate, year) {
                var endDate = new Date(startDate);
                if (startDate.getMonth() === 11 && startDate.getDate() > 25) {
                    var newYear = year + 1;
                    var newDate = 6 - (31 - startDate.getDate());
                    endDate.setFullYear(newYear, 0, newDate);
                }
                else {
                    endDate.setDate(startDate.getDate() + 6);
                }
                return endDate;
            }
      

  2.   

    不好意思,第2部分代码有错,重贴:        function getStartDateByWeek(year, week) {
                var startDate = new Date();
                startDate.setFullYear(year, 0, 1); //变态的js月份从0开始
                var dayOfWeek = startDate.getDay();
                var count = 0;
                var weekCount = 1;
                if (weekCount === week) {
                    while (dayOfWeek > 0) {
                        startDate.setDate(startDate.getDate() - 1);
                        dayOfWeek = startDate.getDay();
                    }
                }
                else {
                    while (weekCount !== week) {
                        startDate.setDate(startDate.getDate() + 7);
                        weekCount++;
                    }
                    while (dayOfWeek > 0) {
                        startDate.setDate(startDate.getDate() - 1);
                        dayOfWeek = startDate.getDay();
                    }
                }
                return startDate;
            }        function getEndDate(startDate, year) {
                var endDate = new Date(startDate);
                endDate.setDate(startDate.getDate() + 6);
                return endDate;
            }
      

  3.   


    function fun(year, week){
    var d1, d2;
    if(week == 1){
    d1 = new Date(year, 0, 1);
    d2 = new Date(d1);
    d2.setDate(d2.getDate() + (6 - d2.getDay()));
    } else {
    d1 = new Date(year, 0, 1);
    d1.setDate(d1.getDate() + (0 - d1.getDay()) + (7 * (week - 1)));
    d2 = new Date(d1);
    d2.setDate(d2.getDate() + 6);
    } var ret = 
    {
    StartDate: d1,
    EndDate: d2
    };
    return ret;
    }var ret = fun(2012, 2);
    var d1M = ret.StartDate.getMonth() + 1;
    var d1D = ret.StartDate.getDate();
    alert("起始日期是:" + d1M + "月" + d1D + "日");
    var d2M = ret.EndDate.getMonth() + 1;
    var d2D = ret.EndDate.getDate();
    alert("结束日期是:" + d2M + "月" + d2D + "日");
      

  4.   

    漏了一点function fun(year, week){
    var d1, d2;
    if(week == 1){
    d1 = new Date(year, 0, 1);
    d2 = new Date(d1);
    d2.setDate(d2.getDate() + (6 - d2.getDay()));
    } else {
    d1 = new Date(year, 0, 1);
    d1.setDate(d1.getDate() + (0 - d1.getDay()) + (7 * (week - 1)));
    d2 = new Date(d1);
    d2.setDate(d2.getDate() + 6);
    while(d2.getFullYear() != d1.getFullYear()) {
    d2.setDate(d2.getDate() - 1);
    }
    } var ret = 
    {
    StartDate: d1,
    EndDate: d2
    };
    return ret;
    }