2009-10-31 47 views
0

我想找到这一天属于JavaScript中的周数。我对星期的定义是当天到目前为止的星期六的数量。因此,1月的头几天被算作去年的最后一周。从那里,第一个星期六到第五个星期(0周数)。我怎样才能找到一天属于使用JavaScript的一周?

任何人都知道如何实现这样的功能?

+0

实现这样的功能是工作所需的第一件事问题。你没有提供任何证据表明你已经申请任何。为什么有人会真正为你提供答案,我是无法理解,然后你还有胆量挑剔他们 – 2009-10-31 09:49:43

+2

我申请工作,但没有我尝试的成功。而且我不挑剔,我只是说这些解决方案没有解决问题。对不起,如果我看起来这样。 – Eric 2009-10-31 09:53:23

+1

@George:所谓社区有对工作的要求略有不同的角度,这里比你会发现在一个简单的NG或论坛。一个好的和被接受的答案并不完全没有奖励。其次,SO的目标是成为迅速找到问题答案的地方。所以搜索者甚至不需要花费精力去问这个问题,因为别人已经拥有了。 – AnthonyWJones 2009-10-31 11:54:00

回答

4

这?

function week(date) { 
    var firstSat = new Date(date.getFullYear(), 0, 1); 
    firstSat.setDate(firstSat.getDate() + (6 - firstSat.getDay())); 

    var delta = Math.floor((date - firstSat)/(7*24*60*60*1000)); 

    return delta < 0 ? 
      delta + 52 : // first few days before 1st Sat 
      delta 
} 

week(new Date(2009,0,1)); // Jan 1, 2009 => 51 => "1 week into last year" 
week(new Date(2009,0,2)); // 51 
week(new Date(2009,0,3)); // 0 => "[beginning of] week 1" 
week(new Date(2009,0,10)); // 1 => "[beginning of] week 2" 
week(new Date(2009,0,11)); // 1 => "still week 2" 
week(new Date(2009, 9, 30)); // Fri Oct 30, 2009 => 42 
+0

非常接近。但是,我需要“去年的1周”才能返回51或52,因为它应该从前一年的周数计算 – Eric 2009-10-31 09:50:23

+0

谢谢。次要(但可能不重要):大多数年份只有52周(基于0的:51),但对于我的意图应该没问题。 – Eric 2009-10-31 10:04:04

+0

@Eric:你说得对。此外,四舍五入(即“星期六==周末”)意味着你在年底的末尾也会得到52。调整后的代码总是舍入(即“星期六== *新*星期开始”) – 2009-10-31 13:40:21

0
var getWeekForDate = function(date) { 
    var yearStart = new Date(date.getFullYear(), 0, 0); 

    // move to first Saturday 
    yearStart.setDate(yearStart.getDate() + (6 - yearStart.getDay())); 

    var msSinceStart = date - yearStart; 
    var daysSinceStart = msSinceStart/(1000 * 60 * 60 * 24); 
    var weeksSinceStart = daysSinceStart/7; 
    return Math.floor(weeksSinceStart); 
}; 
+0

这不适用于一年中的第一个星期六之前的日期。而不是返回-1,象现在这样,它应该返回51或者52,这取决于上一年 – Eric 2009-10-31 09:41:29

+0

因为客户每星期要定义为开始上周六,是有一定的节日。这个想法是计算星期数,然后从数组中拉出相应的季节。 – Eric 2009-10-31 09:43:10

0

最后,我去:

Date.prototype.getWeek = function() 
{ 
var localOffset = this.getTimezoneOffset() * 60000; 
var date = new Date(this-localOffset); 
var firstSat = new Date(this); 
firstSat.setDate(1); 
firstSat.setMonth(0); 
firstSat.setDate(firstSat.getDate() + (6 - firstSat.getDay())); 

if(date < firstSat) 
{ 
    date.setDate(date.getDate()-7); 
    return date.getWeek()+1; 
} 
else 
{ 
    return Math.floor((date - firstSat)/(7*24*60*60*1000)); 
} 
} 

从而消除与UTC偏移

相关问题