制作自定义日历月视图...如何正确对齐日期?

时间:2015-04-15 23:45:25

标签: ruby-on-rails ruby

我正在创建自己的日历并遇到一些问题......现在我正在使用Date.today.beginning_of_month来获取当前月份。我的控制器设置如此......

#Controller
  def calendar
     @day_of_month = current_month    
  end

  def current_month
    date = Date.today.beginning_of_month
    return (date..date + 31.days).to_a
  end

在我看来,我有以下几点......

<% @days_of_month.each_slice(7) do |slice| %>
  <div class="week_row_in_month">
    <% slice.each do |day| %>
      <div class="month_day" id="<%= day %>">
        <div class="header">
          <%= day.strftime("%A") %>
        </div>
      </div>
    <% end %>
  </div>
<% end %>

问题是我的&#34;日历&#34;从这个月的第一天开始(我理解为什么......因为beginning_of_month方法)...但是如果4月1日在星期三落下......我怎么会把它对齐所以它落在了星期三的div并没有像星期日div那样对齐?

我希望这是有道理的。如果有任何混淆让我知道,我会编辑澄清。

1 个答案:

答案 0 :(得分:1)

为了让您的日历以您描述的方式在本周初开始,您可以执行以下操作:

# Controller

def calendar
   @days_of_month = current_month    
end

def current_month
  date = Date.today.beginning_of_month
  start_date = date - date.wday
  end_date = date.end_of_month + (6 - date.end_of_month.wday)
  return (start_date..end_date).to_a
end

由于Date#wday方法将星期几作为数字(0-6,星期日为零)返回,因此您可以使用它快速查找星期的开始日期。有关此方法的更多信息,请访问:http://ruby-doc.org/stdlib-2.2.1/libdoc/date/rdoc/Date.html#method-i-wday