各位大大,碰到点小问题:需要写一个js来计算一年有多少周(这个已经完成),然后要求将每周具体到周一到周天具体是几年几月几号到几年几月几号(因为要涉及到sql语句的查询where判断)。
如2016年第一周:2016-01-01到2016-01-03
    2016年第二周:2016-01-04到2016-01-11
涉及到近10年就行了
希望大家给个思路,有现成的js脚本更好了,现在完成到这个样:

解决方案 »

  1.   

    var year = 2016;
    var da = new Date(year,0,1);
    var n = 6-(da.getDay()+6)%7;
    da.setDate(da.getDate()+n);//首先算出这年的第一个星期日
    alert(da.toLocaleString());da.setDate(da.getDate()+7);//之后每次对日期加7就行了
      

  2.   


    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <meta charset="UTF-8" />
    </head>
    <body>
    <script>
        'use strict';
        function formatDig(num){
            return num>9?''+num:'0'+num;
        }
        function formatDate(mill){
            var y=new Date(mill);
            let raws= [
                y.getFullYear(),
                formatDig(y.getMonth()+1),
                formatDig(y.getDate()),
                y.getDay()||7
            ];
            let format=['年','月','日 星期'];
            return String.raw({raw:raws},...format);
        }
        function* createWeeks(year){
            const ONE_DAY=24*3600*1000;
            let start=new Date(year,0,1),
                   end=new Date(year,11,31);
            let firstDay=start.getDay()|| 7,
                    lastDay=end.getDay()||7;
            let startTime=+start,
                    endTime=startTime+(7-firstDay)*ONE_DAY,
                    _endTime=end-(7-lastDay)*ONE_DAY;
            yield [startTime,endTime];
            startTime=endTime+ONE_DAY;
            endTime=endTime+7*ONE_DAY;
            while(endTime<_endTime){
                yield [startTime,endTime];
                startTime=endTime+ONE_DAY;
                endTime=endTime+7*ONE_DAY;
            }
            yield [startTime,+end];
        }
        let index=1;
        for(let i of createWeeks(2016)){
            let start=i[0],
                    end=i[1];
            console.log(`第${formatDig(index++)}周 ${formatDate(start)}-${formatDate(end)}`);
        }
    </script>
    </body>
    </html>
      

  3.   

    <!DOCTYPE html>
    <html>
    <head>
        <title></title>
        <meta charset="UTF-8" />
    </head>
    <body>
    <script>
        'use strict';
        function formatDig(num){
            return num>9?''+num:'0'+num;
        }
        function formatDate(mill){
            var y=new Date(mill);
            let raws= [
                y.getFullYear(),
                formatDig(y.getMonth()+1),
                formatDig(y.getDate()),
                y.getDay()||7
            ];
            let format=['年','月','日 星期'];
            return String.raw({raw:raws},...format);
        }
        function* createWeeks(year){
            const ONE_DAY=24*3600*1000;
            let start=new Date(year,0,1),
                   end=new Date(year,11,31);
            let firstDay=start.getDay()|| 7,
                    lastDay=end.getDay()||7;
            let startTime=+start,
                    endTime=startTime+(7-firstDay)*ONE_DAY,
                    _endTime=end-(7-lastDay)*ONE_DAY;
            yield [startTime,endTime];
            startTime=endTime+ONE_DAY;
            endTime=endTime+7*ONE_DAY;
            while(endTime<_endTime){
                yield [startTime,endTime];
                startTime=endTime+ONE_DAY;
                endTime=endTime+7*ONE_DAY;
            }
            yield [startTime,+end];
        }
        let index=1;
        for(let i of createWeeks(2016)){
            let start=i[0],
                    end=i[1];
            console.log(`第${formatDig(index++)}周 ${formatDate(start)}-${formatDate(end)}`);
        }
    </script>
    </body>
    </html>
      

  4.   

        var year = 2018 //选择年份
        var lastDay = new Date(year + 1,0,0) // 一年的最后一天
        var firstDay = new Date(year,0,1) // 一年的最后一天
        var obj = {}
        var index = 1
        var day = new Date(year,1,1)
        function formatDate(d){
            return d.toLocaleDateString('zh-cn',{year: 'numeric', month: '2-digit',day: '2-digit'}).replace(/\//g,'-')
        }
        while (day < lastDay){
            day.setDate(day.getDate() + 1)
            if(day.getDay() === 6){
                obj['第' + (index++) + '周'] = formatDate(firstDay) + ' 到 ' + formatDate(day)
                firstDay = new Date(day.getTime() + 86400000)
            }
        }
        if(day !== lastDay){
            obj['第' + (index++) + '周'] = formatDate(firstDay) + ' 到 ' + formatDate(lastDay)
        }
        console.log(JSON.stringify(obj,null,' '))