考虑从一周中间开始的年份,获取一周的开始和结束日期

时间:2015-05-22 18:36:15

标签: javascript date

我正在使用一个函数来返回一年中给定周数的开始和结束日期。这是功能:

function getWeekRange(week){

            var d = new Date("Jan 01, " + $scope.today.getFullYear() + " 01:00:00");
            var w = d.getTime() + 604800000 * (week);
            var d1 = new Date(w);
            var d2 = new Date(w + 518400000);

            return {
                startDate: d1,
                endDate: d2,
            };

 }

我动态设置年份,让我们看一下年份为2015的示例。考虑从0开始的周数,如果我使用getWeekRange(0),我将收到以下结果:

{
   startDate: Thu Jan 01 2015 01:00:00 GMT-0200 (BRST), 
   endDate: Wed Jan 07 2015 01:00:00 GMT-0200 (BRST)
}

问题在于此代码不考虑2015年的星期四开始。 getWeekRange(0)的正确结果应为:

{
   startDate: Thu Jan 01 2015 01:00:00 GMT-0200 (BRST), 
   endDate: Sat Jan 03 2015 01:00:00 GMT-0200 (BRST)
}

getWeekRange(1)的结果应为:

{
   startDate: Sun Jan 04 2015 01:00:00 GMT-0200 (BRST), 
   endDate: Sat Jan 10 2015 01:00:00 GMT-0200 (BRST)
}

有没有人有线索?

- 编辑 -

我的问题与this one不同,因为我没有一年中的某一天,我只有一周的一周(从0到51),我的案例认为是第一个如likeitlikeit所述,一年中的一周只是整周的一部分。

2 个答案:

答案 0 :(得分:2)

我可以为我的问题找到一个简单的解决方案,因为只有我一年的第一周才会给我带来麻烦。这是代码:

function getWeekRange(week){
            var d = new Date("Jan 01, " + $scope.today.getFullYear() + " 01:00:00");
            var firstWeekDays = 7 - d.getDay();
            var d1, d2;

            if(week > 0) {
                var w = d.getTime() + 604800000 * (week-1) + 24*60*60*1000 * firstWeekDays;
                d1 = new Date(w);
                d2 = new Date(w + 518400000);
            } else {
                d1 = d;
                d2 = new Date(d1.getTime() + 24*60*60*1000 * (6 - d1.getDay()));                    
            }

            return {
                startDate: d1,
                endDate: d2,
            };

    }

初始代码有两个主要差异。

  • 对于一年中的这一周,我只是得到一年中的第一天,然后根据它开始的星期几我可以找到一周的结束日

  • 在其他几周内,我将7*week-1天加到第一天(此总和不考虑第一周的天数),并添加firstWeekDays这是一个数字第一周的日子(因为其他几周并不总是7天)。

如果有人有更好的解决方案,我会很高兴听。

答案 1 :(得分:0)

This answer显示如何使用getDate计算一周中的第一天来计算当天的偏移量。

使用此方法,您可以使用getDate来确定一年中第一天的哪一天。然后,您可以从此值中减去一周的最后一天,以便知道要添加到d2中的天数,以便通过调整从一年中第一天开始的日期到天数的偏移量来计算星期六的日期,直到结束1月1日的一周。