在rails中更改一周的第一天

时间:2010-10-24 20:38:57

标签: ruby-on-rails datetime

我尝试在轨道上用ruby构建日历。

在ruby-on-rails中,星期一被认为是一周的第一天,但​​我必须将星期日定为第一天。我打算改变它以正确使用日期的内置方法RoR。 假设今天是星期日,也就是24日。看一下这个例子:

Date.now.beginning_of_week

打印:2010-10-18;但如果我可以将星期日设置为本周的第一天,则应打印:2010-10-24

7 个答案:

答案 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) %>