Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 获取每月最后一个星期五的日期_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 获取每月最后一个星期五的日期

Ruby on rails 获取每月最后一个星期五的日期,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是ruby的新手,我想知道每个月的最后一个星期五。 例如,3月的最后一个星期五是29日,4月26日的最后一个星期五。 那么,我怎样才能找到解决方案呢? 我正在使用rails框架 方法.cweek返回一年中的一周,但不返回当月的一周 #!/usr/bin/env ruby require 'date' (1..12).each do |month| d = Date.new(2013, month, -1) d -= (d.wday - 5) % 7 puts d end (第

我是ruby的新手,我想知道每个月的最后一个星期五。 例如,3月的最后一个星期五是29日,4月26日的最后一个星期五。 那么,我怎样才能找到解决方案呢? 我正在使用rails框架

方法
.cweek
返回一年中的一周,但不返回当月的一周

#!/usr/bin/env ruby

require 'date'

(1..12).each do |month|
  d = Date.new(2013, month, -1)
  d -= (d.wday - 5) % 7
  puts d
end

(第二个/第三个谷歌结果…)

我同意李的答案,我只发布这一个,因为(我认为)它很酷

使用gem
Chronic
():


可以在一行中检索一个月的最后一个星期五:

def last_fridays_for_every_month_of_year(year)
  (1..12).map do |month|
    Date.new(year, month, -1).downto(0).find(&:friday?)
  end
end
您可以这样使用它:

last_fridays_for_every_month_of_year 2013
#=> [#<Date: 2013-01-25 ((2456318j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-02-22 ((2456346j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-03-29 ((2456381j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-04-26 ((2456409j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-05-31 ((2456444j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-06-28 ((2456472j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-07-26 ((2456500j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-08-30 ((2456535j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-09-27 ((2456563j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-10-25 ((2456591j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-11-29 ((2456626j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-12-27 ((2456654j,0s,0n),+0s,2299161j)>]
2013年每个月的最后一个星期五 #=> [#, #, #, #, #, #, #, #, #, #, #, #]
@sawa我猜他的例子指的是当前年份…
d=Date。new(2013,month,-1)
也给出了该月的最后一天。您的脚本给出了2013年4月4日星期四,在我的ruby控制台中,我的工作日计数从1开始。我把它修好了。你会认为我也是第一个建议慢性病的人(我坚持),它肯定有它的位置。我不认为这是一个选项,但肯定是一个选项。嗨@tessi,你介意解释一下
.find(&friday?
片段的作用吗?“我似乎找不到关于这方面的相关文档。”vincentleest肯定<代码>日期。新的(年,月,-1)。下至(0)提供日期数组。查找部分等于
date_array.find{| d | d.freday?}
。它返回第一个日期,
date.friday?
返回
true
def last_fridays_for_every_month_of_year(year)
  (1..12).map do |month|
    Date.new(year, month, -1).downto(0).find(&:friday?)
  end
end
last_fridays_for_every_month_of_year 2013
#=> [#<Date: 2013-01-25 ((2456318j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-02-22 ((2456346j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-03-29 ((2456381j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-04-26 ((2456409j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-05-31 ((2456444j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-06-28 ((2456472j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-07-26 ((2456500j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-08-30 ((2456535j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-09-27 ((2456563j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-10-25 ((2456591j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-11-29 ((2456626j,0s,0n),+0s,2299161j)>,
     #<Date: 2013-12-27 ((2456654j,0s,0n),+0s,2299161j)>]