はじめに
Ruby on Railsでアプリケーションを作っていて、カレンダーを実装する際などで、日時フォーマットを指定する必要が出てきました。
そこで、今までなんとなくしか知らなかったstrftimeのフォーマットについて、今後自分がまた使う場面がでてきた時にぱっと使えるようにと思い、まとめました。自分なりに。
strftime早見表(Date型用)↓↓
年(year)を取得したい
|書き方 |出力 |
|---|---|---|
|'%Y' |西暦表示 |
|'%y' |西暦表示(下2桁) |
|'%C' |西暦を100で割った値(整数2桁) |
'2018-07-01'.to_date.strftime('%Y')
=> "2018"
'2018-07-01'.to_date.strftime('%y')
=> "18"
'2008-07-01'.to_date.strftime('%y')
=> "00"
'1998-07-01'.to_date.strftime('%y')
=> "98"
'2018-07-01'.to_date.strftime('%C')
=> "20"
'218-07-01'.to_date.strftime('%C')
=> "02"
'18-07-01'.to_date.strftime('%C')
=> "00"
月(month)を取得したい
|書き方 |出力 |
|---|---|---|
|'%m' |月表示(2桁) |
|'%B' |月名表示(英語) |
|'%b', '%h' |月名表示(英語、頭3文字) |
'2018-07-01'.to_date.strftime('%m')
=> "07"
'2018-012-01'.to_date.strftime('%m')
=> "12"
'2018-07-01'.to_date.strftime('%B')
=> "July"
'2018-12-01'.to_date.strftime('%B')
=> "December"
# ※以下はすべて'%b'を'%h'としても同様です
'2018-07-01'.to_date.strftime('%b')
=> "Jul"
'2018-12-01'.to_date.strftime('%b')
=> "Dec"
日(day)を取得したい
|書き方 |出力 |
|---|---|---|
|'%d' |日付表示(2桁) |
|'%e' |日付表示(そのまま) |
'2018-07-01'.to_date.strftime('%d')
=> "01"
'2018-07-31'.to_date.strftime('%d')
=> "31"
'2018-07-01'.to_date.strftime('%e')
=> "1"
'2018-07-31'.to_date.strftime('%e')
=> "31"
曜日(weekday)を取得したい
|書き方 |出力 |
|---|---|---|
|'%A' |曜日名表示(英語) |
|'%a' |曜日名表示(英語、頭3文字) |
|'%u' |1~7の数値(1から月曜日、火曜日、...となる) |
|'%w' |0~6の数値(0から日曜日、月曜日、...となる) |
'2018-07-01'.to_date.strftime('%A')
=> "Sunday"
'2018-07-01'.to_date.strftime('%a')
=> "Sun"
'2018-07-02'.to_date.strftime('%u') # 月曜日
=> "1"
'2018-07-01'.to_date.strftime('%u') # 日曜日
=> "7"
'2018-07-02'.to_date.strftime('%w') # 月曜日
=> "1"
'2018-07-01'.to_date.strftime('%w') # 日曜日
=> "0"
その年の何日目であるかを取得したい
|書き方 |出力 |
|---|---|---|
|'%j' |整数値(3桁) |
'2018-01-01'.to_date.strftime('%j')
=> "001"
'2018-07-01'.to_date.strftime('%j')
=> "182"
'2020-07-01'.to_date.strftime('%j') # うるう年
=> "183"
- ちなみに -
-
07
のように0埋めされた数値に変換される場合、「-(ハイフン)」によって0を除去することができます。
# 月取得
'2018-07-01'.to_date.strftime('%m') # 通常
=> "07"
'2018-07-01'.to_date.strftime('%-m') # 0埋め除去
=> "7"
# その年の何日目であるかを取得
'2018-01-01'.to_date.strftime('%j') # 通常
=> "001"
'2018-01-01'.to_date.strftime('%-j') # 0埋め除去
=> "1"
- 文字列に変換される場合、「^」によってすべて大文字にすることができます。
# 曜日名取得
'2018-07-01'.to_date.strftime('%A') # 通常
=> "Sunday"
'2018-07-01'.to_date.strftime('%^A') # 大文字置換
=> "SUNDAY"
# 曜日名(頭3文字)取得
'2018-07-01'.to_date.strftime('%a') # 通常
=> "Sun"
'2018-07-01'.to_date.strftime('%a') # 大文字置換
=> "SUN"
おわりに
strftimeって"**str**ing **f**ormat time"の略らしいのですが、それを知るまでめっちゃタイプミスしてました(恥ずかしいですね)。
strftime
とは逆に、文字列から日時をとるstrptime
というメソッドもありますが、こちらは"string parse format time"から来ているらしいです(諸説あり?)。
Datetime型に対応した、分や秒の変換等については、余力があれば今後追加します。。。
参考URL(2018/7/2確認)