👻

Rails日付のフォーマットを定義する方法

2024/08/04に公開

概要

Railsで、日付、時刻の書式指定をして文字列に変換するメソッドを紹介します。
strftimeメソッドが使えるみたいです。

実際のコード

店舗でチケットを発行して購入する前提で書いたview部分です。

 <div class="c-block-customer__wrap">
  <div class="u-mbs is-xs-harf">
    <h2 class="c-heading is-sm u-text-left">チケット保有枚数</h2>
  </div>
  <div class="js-overflow-table">
    <table class="c-table-plan">
      <thead>
        <tr>
          <th class="u-text-left">店舗名</th>
          <td>チケット購入日</td>
          <td>残チケット数</td>
        </tr>
      </thead>
      <tbody>
        <% @ticket_number_per_store.each do |s| %>
          <tr>
            <th><%= s[:store_name] %></th>
            <td><%= s[:purchase_date].strftime("%Y/%m/%d") %></td> 
            <td><%= s[:total_tickets] %></td>
          </tr>
        <% end %>
      </tbody>
    </table>
  </div>
</div>

上のコードでは、strftimeを使用しています。

<td><%= s[:purchase_date].strftime("%Y/%m/%d") %></td> 

これは西暦、月、日付を指定しています。
ex) s[:purchase_date]が2024-08-04の日付オブジェクトの時、
<td>2024/08/04</td>というHTMLが生成

よく使う書式

参考資料にまとめてありました。

よく使う書式
(※日時は2018年1月2日 3時4分5秒 567ミリ秒を想定)(※△=スペース)

書式 簡単な説明 記述例 出力例
%Y 西暦 日時データ.strftime("%Y") 2018
%y 西暦(下2桁) 日時データ.strftime("%y") 18
%m 月(2桁) 日時データ.strftime("%m") 01
%d 日(2桁) 日時データ.strftime("%d") 02
%-d 日(1~2桁) 日時データ.strftime("%-d") 2
%e 日(空白埋め2桁) 日時データ.strftime("%e") 2
%H 時(2桁)24時間制 日時データ.strftime("%H") 03
%-H 時(1~2桁)24時間制 日時データ.strftime("%-H") 3
%k 時(空白埋め2桁)24時間制 日時データ.strftime("%k") 3
%l 時(1~2桁)12時間制 日時データ.strftime("%l") 3
%M 分(2桁) 日時データ.strftime("%M") 04
%-M 分(1~2桁) 日時データ.strftime("%-M") 4
%S 秒(2桁) 日時データ.strftime("%S") 05
%-S 秒(1~2桁) 日時データ.strftime("%-S") 5
%L ミリ秒 日時データ.strftime("%L") 567
%F 日付 日時データ.strftime("%F") 2018-01-02
%T 時刻(時分秒)24時間制 日時データ.strftime("%T") 03:04:05
%R 時刻(時分)24時間制 日時データ.strftime("%R") 03:04
%r 時刻(時分秒)12時間制と午前または午後 日時データ.strftime("%r") 03:04:05 AM
%P 午前または午後(小文字) 日時データ.strftime("%P") am
%p 午前または午後(大文字) 日時データ.strftime("%p") AM

引用 https://www.sejuku.net/blog/44796

より詳しい資料

以下の資料でもっと詳しい説明があるのでよかったらご覧ください。

https://www.sejuku.net/blog/44796

その他の資料

https://qiita.com/kat0/items/f37489df9da78d51f9c0

Discussion