rails
というよりもactive_support
を使って今月のカレンダーをHTMLで生成するerbコードです。ロジックとしては次の通りです。
- 今月の1日の週の月曜日の日付
d
を得ます。 -
d
から1週間分をループで回します。 - ループ内では、ループ内の日
c
が今月でない分は空欄に、今月であれば日付を入れます。 - ループを抜けた後に
d
を1週間後にずらします。 - 2.に戻ります(4回目迄)。
<% today = Date.today%>
<table>
<caption><%= today.strftime('%Y年%m月')%></caption>
<tr>
<th>月</th>
<th>火</th>
<th>水</th>
<th>木</th>
<th>金</th>
<th>土</th>
<th>日</th>
</tr>
<tr>
<% month = today.strftime('%m')%>
<% d = today.at_beginning_of_month.at_beginning_of_week%>
<% 1.upto(5).each do|i|%>
<tr>
<% (d..d.end_of_week).each do|c|%>
<th><%= (c.strftime('%m') == month)? c.strftime('%d'): " "%></th>
<% end %>
</tr>
<% d = d + 1.week %>
<% end %>
</table>
2017年3月に実行して生成されたHTMLをブラウザから見るとこんな感じになります(上のコードのままだと24日のリンクは付きません)。