在Ruby(Sinatra)中度过一年中的各个星期

时间:2010-10-25 21:30:56

标签: ruby date sinatra datamapper

我正在使用Sinatra和Datamapper创建一个非常简单的分时应用程序。应用程序中的每个用户都将有n个预订,并且目前每个预订从周一到周日运行,每周只能进行一次预订。

现在我需要一个带有文本框(和标签)的视图,用于一年中的每个星期用户将其名称(通过自动完成或其他内容),从而创建该周的预订。如果保留一周,名称当然会填入文本框(并禁用)

这就像是

weeks.each do
  find user that has reserved this week - and create a textbox
end

所以我想我的问题很简单 - 如何在Ruby中循环使用一周?

或者它是一个更好的解决方案,只需循环52次并为每个用户制作一个数组,其中包含预留周数?

3 个答案:

答案 0 :(得分:2)

你应该循环使用:

(Date.beginning_of_year.cweek...Date.today.end_of_year.cweek).each do |week|
  find user that has reserved this week - and create a textbox
end

答案 1 :(得分:1)

(1..52).each do |week|
   # find user that has reserved this week - and create a textbox
end

答案 2 :(得分:0)

对于其他可能会发现这个老问题的人,就像我做的那样......

1月1日有时是第53周。12月31日有时是第1周。如果你想要在一年中的所有几周内完成,你必须首先决定是否要在1月的第一天,即使它可能是前一天。一年的第53周。

要获得一年中最高的周数,您可以随时查看12月28日(因为ISO周表示第1周是第一周的第一周)。

如果你不关心1月的前几天(可能是星期日),你可能会做以下事情:

require 'date' # Already included in sinatra though

(1..Date.parse("#{year}-12-28").cweek).each do |week|
  puts week
end