在日历中垂直返回同一工作日-Ruby on Rails

时间:2019-03-04 08:46:38

标签: ruby-on-rails ruby

我希望垂直返回所有日期,如下面的日历所示。

enter image description here

例如,如果我点击星期二,我应该可以返回

  • 03/03/2020
  • 02/06/2020
  • 2020年9月1日
  • 2020年11月11日
  • 2020年1月12日

目前,我整年都有整个工作日,但是我还没有想到如何根据显示的日历来过滤我不想使用的日期。

date = Date.parse("09-01-2020").to_date
dates_selected = (date..date.end_of_year).group_by(&:wday)[date.wday]
# return all the dates on Wednesday

# filter the dates that are irrelevant

对我如何解决这个问题有任何见解?谢谢。

更新1

我使用这种格式是因为我想在垂直行中安排工作日或休息日。我设法用Java脚本提取日期。我只是想知道是否可以仅使用ruby返回所有日期。

更新2

为避免混淆,我使用2020年日历。感谢Amadan指出。

enter image description here

1 个答案:

答案 0 :(得分:2)

我相信date.day + (date.wday - date.day + 1) % 7是您日历中的列号。因此,只需选择具有相同列的日期:

require 'date'

private def column_of(date)
  date.day + (date.wday - date.day + 1) % 7
end
def dates_from_same_column_as(date, range)
  column_of_date = column_of(date)
  range.select { |d| column_of(d) == column_of_date }
end

year = Date.parse('2020-01-01')..Date.parse('2020-12-31')
date = Date.parse('2020-03-03')
dates_from_same_column_as(date, year).map(&:to_s)
# => ["2020-03-03", "2020-06-02", "2020-09-01", "2020-11-03", "2020-12-01"]