【Rails】条件に応じて日付の表示を判定する
LINEのトーク表示って何時何分とか、何曜日とか、古い物だと2020.xx.xxみたいな感じで表示されます
あの部分を作ります
条件に応じて日付の表示を判定する
今日のメッセージなら xx:xx の表示
昨日〜1週間前までは x曜日 の表示
それ以前は 2020.xx.xx の表示
という形にします
ここはviewにガッツリ書くことにしまいた(本当はあんまりよろしくないのだけど...)
p.latest-talk-show__data-time-notifiction
span#data-time
pとspanを用意
この時点でcreated_atの値を確認
created_at: Sat, 31 Oct 2020 18:33:23 JST +09:00 という値が取れました
コードに記述を加えて分岐させていきます
p.latest-talk-show__data-time-notifiction span#data-time / もしトークが今日の物ならば - if Date.today == talk.talk.last.created_at.to_date = talk.talk.last.created_at.strftime('%H:%M') / もしトークが過去1週間ならば - elsif 1.week.ago.beginning_of_day.to_date..Time.zone.now.end_of_day.to_date == talk.talk.last.created_at.to_date - weeks = ["日","月","火","水","木","金","土"] - num = talk.talk.last.created_at.strftime("%w").to_i - week = weeks[num] = week + "曜日" / それ以降であれば - else = talk.talk.last.created_at.strftime("%Y.%M.%D")
大分冗長です...すっきりさせたいけどそれは別の機会で...
少し読み解きます
=> Sat, 31 Oct 2020
== で今日の日付判定をcreated_atとする時、created_atにto_dateをつけましょう
何もつけないままだと時間の部分まで含めて判定するので今日の日付でもfalseになります
[3] pry(#<#<Class:0x00007f390891b390>>)> Date.today == talk.talk.last.created_at.to_date => true
trueが帰ってきました
= talk.talk.last.created_at.strftime('%H:%M')
created_atの中から時間と分を引っ張って表示させます
次に、今日と一致しない場合
- elsif 1.week.ago.beginning_of_day.to_date..Time.zone.now.end_of_day.to_date == talk.talk.last.created_at.to_date
結構長いです!
まず1.week.ago.beginning_of_day.to_date..Time.zone.now.end_of_day.to_dateの部分
1.week.agoで現在の時間から1週間前を呼ぶことができます
[7] pry(#<#<Class:0x00007f390891b390>>)> 1.week.ago => Sat, 24 Oct 2020 22:19:33 JST +09:00
さらにbegining_of_dayでその日の始まり(00:00)になります
[10] pry(#<#<Class:0x00007f390891b390>>)> 1.week.ago.beginning_of_day => Sat, 24 Oct 2020 00:00:00 JST +09:00
逆にTime.zone.nowで現在の時刻、.end_of_dayで終わり(23:59:59)を呼びます
今日の日付は最初のifで判定されるのでジャスト1週間前までのメッセージを呼べます
上記2つを .. で繋ぐことで1週間前のスタートから今日の終わりまでを指定します
ただやはり時間まではあると判定できないので、.to_dateをつけて日付のみにします
そしてそれを曜日に
- weeks = ["日","月","火","水","木","金","土"] - num = talk.talk.last.created_at.strftime("%w").to_i - week = weeks[num] = week + "曜日"
.strftime("%W")とすることで曜日を0~6の数字で取れます
[1] pry(#<#<Class:0x0000000002fd42e0>>)> talk.talk.last.created_at.strftime("%w") => "6"
つまり、weeksに一旦文字列として値を入れ、numには取得した値を.to_iで数字に
weekにweeks[num]で数字に対応した曜日を入れることで曜日を取得できます
最後の行は割とシンプルですね
= talk.talk.last.created_at.strftime("%Y.%M.%D")
これで判定を行うことができました
実際の画面はこんな感じで
なかなか大変!
次はJavaScriptも触っていきます
またボチボチ更新していきます