我尝试在轨道上用ruby构建日历。
在ruby-on-rails中,星期一被认为是一周的第一天,但我必须将星期日定为第一天。我打算改变它以正确使用日期的内置方法RoR。 假设今天是星期日,也就是24日。看一下这个例子:
Date.now.beginning_of_week
打印:2010-10-18
;但如果我可以将星期日设置为本周的第一天,则应打印:2010-10-24
答案 0 :(得分:21)
现在该方法接受开始日参数:
beginning_of_week(start_day = :monday)
注意:仅从Rails 4.2.7支持param
答案 1 :(得分:19)
我已经设法向rails发出了一个pull请求,现在你可以将symbol参数传递给beginning_of_week
方法。例如,beginning_of_week(:sunday)
会给你一个星期日,假设星期日开始。 end_of_week
方法也是如此。但是你必须等到轨道3.2释放,以防你不在最前沿。
有关详情,请参阅此处: https://github.com/rails/rails/pull/3547
答案 2 :(得分:4)
您可以通过执行以下操作在api中工作:
ree-1.8.7-2011.02 :004 > DateTime.now.beginning_of_week
=> Mon, 30 May 2011 00:00:00 -0400
ree-1.8.7-2011.02 :005 > DateTime.now.beginning_of_week.advance(:days => -1)
=> Sun, 29 May 2011 00:00:00 -0400
编辑:
在最后几分钟考虑这个问题,Rails很有理由以这种方式接近它。你必须有一个默认的一周开始,并传递这个可选参数,你现在可以存储一周的开始,比如数据库中的用户表,并允许用户选择一周中的哪一天开始他们的一周,例如:
first_day_of_calendar_week = {:default => 0, :monday => 0, :sunday => -1 ..}
....
@user = User.find_by_some_attribute(...)
DateTime.now.beginning_of_week.advance(
:days => first_day_of_calendar_week[@user.choice] || first_day_of_calendar_week[:default])
答案 3 :(得分:2)
我不知道它是否是新的东西,但现在(Rais 4.2.5 - Ruby 2.2.3)你可以设置Date.beginning_of_week = :sunday
。我试图在config/application.rb
上设置它,但不知何故它无法正常工作,可能会在每个新请求上重置。然后我把它放在我before_action
的{{1}}上并且完美无缺。
答案 4 :(得分:2)
将此config添加到 config / application.rb
config.beginning_of_week = :sunday
答案 5 :(得分:0)
如果您查看https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/date/calculations.rb#L178,您会看到星期一是硬编码的第一天。 Sam的答案非常好。
答案 6 :(得分:-2)
如果您不想更改API,可以在该日期添加“6”天。我不确定你为什么要'6'但这就是你的问题。
Time.now.beginning_of_week + 6.days
helper.rb
def format_date(time)
time.now.beginning_of_week + 6.days
end
视图
<%= format_date(Time.now) %>