ruby-on-rails 将日名称数组Map到当前周的日期

cyvaqqii  于 2023-03-13  发布在  Ruby
关注(0)|答案(2)|浏览(152)

我一直在努力将一组天Map到当前周的日期。
这是我的模式:

t.text "vote_frequency", default: ["wednesday"], array: true

用户将一周中的一天或多天设置为投票日,数组的结果如下所示:{星期二,星期三,星期四,星期六}
我试着像这样获得本周匹配日的日期:

<% @group.vote_frequency.each do |day| %>
  <%= Date.parse(day) %>
<% end %>

今天是星期日(12日),但星期一显示为星期一(13日)、星期二(14日)等......它们是下周的日期,而不是本周的日期。
解决这个问题的最佳方法是什么?我使用的是Rails 7。
我最初认为这与一周的开始日期有关,并将config.beginning_of_week = :monday添加到我的application.rb中,但没有帮助。

yrefmtwq

yrefmtwq1#

您可以使用#prev_day方法解决此问题:

days = Date.today.wday == 0 ? 7 : 0

@group.vote_frequency.each do |day|
  Date.parse(day).prev_day days
end
4urapxun

4urapxun2#

prev_occurringnext_occuring结合起来怎么样?

previous_sunday = Time.now.to_date.prev_occurring(:sunday)

@group.vote_frequency.map { |day| previous_sunday.next_occurring(day.to_sym) }

首先我们得到上星期日
然后通过vote_frequency数组进行Map,并将所有字符串日期转换为当前周日期
例如

previous_sunday = '2023-03-12'.to_date.prev_occurring(:sunday)
# => Sun, 05 Mar 2023

%w[monday tuesday sunday].map { |day| previous_sunday.next_occurring(day.to_sym) }
# => [Mon, 06 Mar 2023, Tue, 07 Mar 2023, Sun, 12 Mar 2023]

既然你有这样的数组,你就可以把它按照需要的格式呈现在视图中

相关问题