Ruby Rails 3.2.8-如何从Rails获取周数?
我想知道如何从Rails获取当前周数,以及如何操作它:Ruby Rails 3.2.8-如何从Rails获取周数?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我想知道如何从Rails获取当前周数,以及如何操作它: 将周数转换为日期 根据周数确定间隔 谢谢。使用: %U-一年中的周数。这周从星期天开始。(00..53) %W-一年中的周数。本周从星期一开始。(00..53) 如果要在日期中添加43周(或天、年、分钟等),可以使用ActiveSupport提供的: irb(main):001:0> 43.weeks => 301 days irb(main):002:0> Date.today + 43.weeks => Thu
%U
-一年中的周数。这周从星期天开始。(00..53)%W
-一年中的周数。本周从星期一开始。(00..53)
如果要在日期中添加43周(或天、年、分钟等),可以使用ActiveSupport提供的:
irb(main):001:0> 43.weeks
=> 301 days
irb(main):002:0> Date.today + 43.weeks
=> Thu, 22 Aug 2013
irb(main):003:0> Date.today + 10.days
=> Sun, 04 Nov 2012
irb(main):004:0> Date.today + 1.years # or 1.year
=> Fri, 25 Oct 2013
irb(main):005:0> Date.today + 5.months
=> Mon, 25 Mar 2013
间歇期
require 'date'
def week_dates( week_num )
year = Time.now.year
week_start = Date.commercial( year, week_num, 1 )
week_end = Date.commercial( year, week_num, 7 )
week_start.strftime( "%m/%d/%y" ) + ' - ' + week_end.strftime("%m/%d/%y" )
end
puts week_dates(22)
例:输入(周数):22
输出:06/12/08-06/19/08
信贷:Siep Korteling似乎获得了ISO-8601周编号(以周一为基础的一周),就像strftime中的%V
(由@Robban在评论中提到)
例如,我在本周的周一和周日写这篇文章:
[ Date.new(2015, 7, 13), Date.new(2015, 7, 19) ].map { |date|
date.strftime("U: %U - W: %W - V: %V - cweek: #{date.cweek}")
}
# => ["U: 28 - W: 28 - V: 29 - cweek: 29", "U: 29 - W: 28 - V: 29 - cweek: 29"]
您将要远离strftime(“%U”)和
“%W”
使用Date.cweek
问题是,如果您想要将周数转换为日期,strftime
不会给您返回到date.commercial
的值
Date.commercial
需要一个基于1的值范围。
Date.strftime(“%U |%W”)
返回一个基于0的值。你会认为你可以+1它就好了。这个问题会在一年结束的时候发生,那时有53周。(就像刚才发生的事一样…)
例如,让我们看一下2015年12月底的情况,以及获得周数的两个选项的结果:
Date.parse("2015-12-31").strftime("%W") = 52
Date.parse("2015-12-31").cweek = 53
现在,让我们看看如何将周数转换为日期
Date.commercial(2015, 52, 1) = Mon, 21 Dec 2015
Date.commercial(2015, 53, 1) = Mon, 28 Dec 2015
如果盲目地将传递给Date.commercial
的值+1,则在其他情况下,您将以无效日期结束:
例如,2014年12月:
Date.commercial(2014, 53, 1) = ArgumentError: invalid date
如果您必须将周数转换回日期,唯一可靠的方法是使用
date.cweek
您所说的“间隔”是什么意思?间隔是两个日期之间的距离。您不能从整数生成间隔。感谢您的回复,让我澄清间隔。如果我有10月12日到10月19日,它们属于不同的星期。我想我可以将它们转换成各自的周数,然后得到周数间隔。这就是我的意思,那只是减法。将每个日期转换为周数将产生两个整数。您只需从第一个中减去第二个。请注意,strftime中的%V将为您提供ISO-8601中定义的周数。
Date.commercial(2015, 52, 1) = Mon, 21 Dec 2015
Date.commercial(2015, 53, 1) = Mon, 28 Dec 2015
Date.commercial(2014, 53, 1) = ArgumentError: invalid date