一覧表示で年月日表示
※ 今年の一覧取得
dates = (Date.today.beginning_of_year..Date.today.end_of_year).to_a
=>
[Wed, 01 Jan 2014,
Thu, 02 Jan 2014,
Fri, 03 Jan 2014,
Sat, 04 Jan 2014,
Sun, 05 Jan 2014,
~
Sat, 27 Dec 2014,
Sun, 28 Dec 2014,
Mon, 29 Dec 2014,
Tue, 30 Dec 2014,
Wed, 31 Dec 2014]
viewで
dates.each do |date|
date.to_s # yyyy-mm-dd
%w(日 月 火 水 木 金 土)[date.wday] # 曜日
# dateはDate型です よしなに使えたりしますね
end
シンプルでいいね!
@jnchito さんから編集リクエストを頂きました!以下になります!
大変勉強になります。
Rangeをループさせるだけであれば to_a
なしで実行できます。
dates = Date.today.beginning_of_year..Date.today.end_of_year
dates.each do |date|
date.to_s
%w(日 月 火 水 木 金 土)[date.wday]
end
Railsで日付を文字列に変換する場合は、yamlで事前にフォーマットを定義しておくと手軽にシステム全体のフォーマットをコントロールできます。
さらに、将来日本語以外のフォーマットが必要になったときも切り替えがラクです。
# config/locales/ja.yml
ja:
date:
abbr_day_names:
- 日
- 月
# ...
abbr_month_names:
-
- 1月
- 2月
# ...
day_names:
- 日曜日
- 月曜日
# ...
formats:
default: ! '%Y/%m/%d'
long: ! '%Y年%m月%d日(%a)'
short: ! '%m/%d'
>> I18n.locale
:ja
# defaultのフォーマットを使う
>> I18n.l Date.today
"2014/12/23"
>> I18n.l Date.today, format: :long
"2014年12月23日(火)"
>> I18n.l Date.today, format: :short
"12/23"
# ymlに定義していないフォーマットを使いたい場合
>> I18n.l Date.today, format: '%a'
"火"
# ロケールをenに変更する
>> I18n.locale = 'en'
"en"
>> I18n.l Date.today
"2014-12-23"
>> I18n.l Date.today, format: :long
"December 23, 2014"
>> I18n.l Date.today, format: :short
"Dec 23"
>> I18n.l Date.today, format: '%a'
"Tue"