📖

【Rails】期限から残日数を計算【メモ】

2022/03/13に公開

概要

  • 購入したチケットの有効期限(残日数)を表示したい
  • チケット期限は30日間

結論

最終コード
<p>期限が切れるまで後<%= (ticket.created_at.since(30.days).end_of_day - Time.zone.now).to_i / 1.day %>日</p>
# 期限が切れるまで後◯○日

過程(デバッグ)

必要なこと

  1. データ作成日に30日間を追加。(期限が30日間のため)
  2. その日の終わりの時刻に変更。
  3. 上記の値から現時刻を減算し、日数の差分を取得

対象の時刻をticket.created_atに変換

デバッグ
# 現時刻
Time.zone.now 
# 2022-03-11 00:45:25 +0900 

# 現時刻から30日後
Time.zone.now.since(30.days) 
# 2022-04-10 00:45:25 +0900 

# 現時刻から30日後の終わりの時刻
Time.zone.now.since(30.days).end_of_day 
# 2022-04-10 23:59:59 +0900

# 現時刻と30日後の秒数差分
(Time.zone.now.since(30.days) - Time.zone.now).to_i
# 2591999

# 1日の秒数
1.day
# 86400

# 現時刻と30日後の日付差分(1日の秒数で割る)
(Time.zone.now.since(30.days) - Time.zone.now).to_i / 1.day
# 29

# 上記のように現時刻から差分を求めると29日表示になってしまう可能性があるので、購入日の終わりの時刻に変換
(Time.zone.now.since(30.days).end_of_day - Time.zone.now).to_i / 1.day
# 30

# 【完成】 チケット作成時から30日後と現時刻の日付差分
(ticket.created_at.since(30.days).end_of_day - Time.zone.now).to_i / 1.day

参考

Discussion