LoginSignup
5
5

More than 5 years have passed since last update.

to_a使って年月日一覧表示

Last updated at Posted at 2014-12-21

一覧表示で年月日表示

※ 今年の一覧取得

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"
5
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5