获取星期五开始的周列表

时间:2015-10-30 07:55:13

标签: ruby-on-rails ruby datetime

我想从周五开始计算周数。

更多解释:通常在星期日或星期一开始计票,但在这种情况下,我想在星期五开始计算。

一些例子:

2nd Jan 2015 (Fri) ~ 8th Jan 2015 (Thu) : 1st week of 2015
...
25th Dec 2015 (Fri) ~ 31st Dec 2015 (Thu) : 52nd week of 2015
1st Jan 2016 (Fri) ~ 7th Jan 2016 (Thu)   : 1st week of 2016

...

30th Dec 2016 (Fri) ~ 5th Jan 2017 (Thu) : 53rd week of 2016
6th Jan 2017 (Fri) ~ 12th Jan 2017 (Thu) : 1st week of 2017

我需要做的是

1)从日期获得周数

离。

input: Fri, 02 Jan 2015
output: 1

input: Sun, 27 Dec 2015
output: 52

2)获取给定周数的日期范围。

我发现.strftime("%V")几乎可以做到这一点,但每个星期一它会计算几周。

有没有人知道这个很好的解决方案?

2 个答案:

答案 0 :(得分:2)

你走了:

my_array = Array.new
(Date.today..Date.today.next_year).each do |date|
    if date.wday == 5
        end_week = date + 6.days
        my_array << "#{date.day.ordinalize} #{date.strftime('%b')} #{date.strftime('%Y')} (#{date.strftime('%a')}) ~ #{end_week.day.ordinalize} #{end_week.strftime('%b')} #{end_week.strftime('%Y')} (#{end_week.strftime('%a')}) : #{date.strftime('%U')} week of #{date.strftime('%Y')}"
    end
end
# sample output of first element of array
# 30th Oct 2015 (Fri) ~ 5th Nov 2015 (Thu) : 43 week of 2015 

注意:您可以设置任何范围。我在这里设置了Todaynext year

  

%U - 当前年份的周数,从第一个星期日开始   作为第一周的第一天(00..53)

     

%W - 当前年份的周数,从第一个星期一开始   作为第一周的第一天(00..53)

了解更多信息:http://apidock.com/rails/ActiveSupport/TimeWithZone/strftime

答案 1 :(得分:0)

您可以在这里的日期进行各种操作......

DateAndTime

在您的情况下,以下内容适合您。

all_week(start_day = Date.beginning_of_week)