年月日・時間表示 Ruby on Rails

ヘルパーの作成(形式を指定して文字列に変換)

年月日タイムゾーン全てが表示されている上、時間表示が8時00分というような表示になっている

時間計算、給料計算などする際には、時間表示を小数表示に置き換えた方が扱いやすいので、変換ヘルパーを作成する

app/helpers/users_helper.rb
module UsersHelper
# 指定のフォーマットで返します。
def format_basic_info(time)
  format("%.2f", ((time.hour * 60) + time.min) / 60.0)
 end
end

formatメソッド

formatメソッドは、フォーマットに従って文字列を生成(整形)し、オブジェクトとして返します。フォーマットの基本は%指示子の形式です。指示子によって与えられたデータをどのように整形するかが決められます。

format(形式、変換したい文字列など)

例えば、
%s は文字列に変えます
%f は浮動小数点数を出力します。

.2fは値がない場合は.00、値がある場合はそのまま、小数点第三位以上まである場合は第二位まで表示しそれ以降は切り捨てます。

Dateクラス

今日

Date.today
Date.current

組み合わせで表示できるもの

 # 月初  (Date.current).beginning_of_month
# 月末 (Date.current).end_of_month
# 今週の最初 (Date.current).beginning_of_week
# 今週の末 (Date.current).end_of_week
# 先週の月曜日 (Date.current).prev_week(:monday)
# 翌週の月曜日 (Date.current).next_week(:monday)

wday メソットと cwday メソット

Date#cwday 暦週の日 (曜日) を返します (1-7、月曜は1)。
Date#wday  曜日を返します (0-6、日曜日は零)。

従って、これを利用して配列を作成します

$days_of_the_week = %w{日 月 火 水 木 金 土}

$days_of_the_week[hoge.wday] で[hoge.wday] が0なら日曜日、1なら月曜日と表示できます

li18nをインストールしている場合の年月日の表示

ja.yml ファイル内を参照すると

formats:
  default: "%Y/%m/%d"
  long: "%Y年%m月%d日(%a)"
  middle: "%Y年%m月"
  short: "%-m/%-d"
  time: "%H : %M"

これを使って

<%= l(day, format: :short) %> とすると

時間計算

そもそも、どのような形式で計算するのかで異なる。

今回は、データベースにdatetime形式で時間が保存されているものを取り出して、時間の差を計算する

18:06 と 17:11 の差 を計算すると、3300(秒)と出力される。

なので、format メゾットを使って書き換える(形式を指定して文字列に変換)

def working_time(finish, start)
format("%.2f", (((finish - start) / 60) / 60.0)) ← 時間表示にする
end

その他

連続する日などを配列化、範囲オブジェクト化して表記する方法

※範囲オブジェクト化
(@first_day..@last_day)
※配列化
[*@first_day..@last_day]

コメント

タイトルとURLをコピーしました