質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1328閲覧

条件分岐されない  祝日判定

00000000000

総合スコア24

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2018/11/30 05:53

編集2018/11/30 09:15

イメージ説明

ruby

1<% t = Date.today %> 2<% a=t.beginning_of_month %> 3<% b=t.end_of_month %> 4<% c= ["日","月","火","水","木","金","土"]%> 5<% day = (a.strftime("%m/%d")..b.strftime("%m/%d")).to_a %> 6<% day2 = (a..b).to_a %> 7<%= day2[22] %> #2018-11-23 8 9<% if youbi[22]==0||youbi[22]==6||!Date.today.workday?&& !day2[22].workday? %> 10<h5 style="color:red;"><%= day[22] %>(<%=c[youbi[22]]%>)</h5> 11<% else %> 12<h5>aa<%= day[22] %>(<%=c[youbi[22]]%>)</h5> 13</td> 14<% end %>

曜日番号が0または6(日曜、土曜)または祝日の時
日付を赤にしたいんですが祝日の分岐がうまく分岐できません。

11/23は祝実です。

よろしくお願いいたします。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まずyoubi[22]とかday[22]に何が入ってるのかわらないので無視します。
わかり次第修正します。
date変数があり、値がDate型であり、≠ Time.zone.todayと仮定した場合。
(今日が営業日でなければ毎日真っ赤になるのでおかしい気はしますが...)

irb

1<% unless date.workday? && Date.today.workday? %> 2 <td> 3 <h5 style="color:red;"><%= date.strftime("%m/%d#{wd[date.wday]}") %> 4 </td> 5<% else %> 6 <td> 7 <h5>aa<%= date.strftime("%m/%d#{wd[date.wday]}") %></h5> 8 </td> 9<% end %>

で分岐できると思いますが...

if文はworkday?がtrueのとき実行ですよね??

if youbi[22]==0||youbi[22]==6||!Date.today.workday?
となっているのでDate.today.workday?falseの時に実行ですね。

#追記

irb

1<% t = Date.today %> 2 3// 今月の1日? 4<% a=t.beginning_of_month %> 5 6// 今月の最終日? 7<% b=t.end_of_month %> 8<% c= ["日","月","火","水","木","金","土"]%> 9 10// <% days = Time.zone.now.all_month %>でいいのでは? 11<% day = (a.strftime("%m/%d")..b.strftime("%m/%d")).to_a %> 12<% day2 = (a..b).to_a %> 13 14// <% day = days.first.since(22.days) %> 15// <%= day.strftime("%Y-%m-%d(#{c[day.wday]})") > # "2018-11-23(金)" 16// もっといい書き方あるかも 17<%= day2[22] %> #2018-11-23 18 19// 条件式がわかりずらい、結局何がしたいのか... 20// <% unless day.workday? %> と同じ? 21<% if youbi[22]==0||youbi[22]==6||!Date.today.workday?&& !day2[22].workday? %> 22 23// <%= day.strftime("%m/%d(#{c[day.wday]})") # "11/23(金)" 24<h5 style="color:red;"><%= day[22] %>(<%=c[youbi[22]]%>)</h5> 25<% else %> 26 27// <%= day.strftime("%m/%d(#{c[day.wday]})") # "11/23(金)" 28<h5>aa<%= day[22] %>(<%=c[youbi[22]]%>)</h5> 29</td> 30<% end %>

できるだけDate型で使った方が扱いやすいと思います。
見た所無理にArrayにしたり、Date型を崩す必要もなさそうですし...。

どうでしょうか?

投稿2018/11/30 06:18

編集2018/11/30 08:31
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

00000000000

2018/11/30 06:20

business_time: beginning_of_workday: "00:00:00" end_of_workday: "23:59:59" holidays: - November 23, 2018 - December 24, 2018 - January 01, 2019 - January 14, 2019 - February 11, 2019 - March 21, 2019 - April 29, 2019 - May 03, 2019 - May 06, 2019 work_week: - mon - tue - wed - thu - fri
00000000000

2018/11/30 06:23 編集

祝日設定によってコンソール上では以下のように表示されるようになりました。 [1] pry(main)> Date.new(2018,11,23).workday? => false [2] pry(main)> !Date.new(2018,11,23).workday? => true if文はworkday?がtrueのとき実行ですよね??
退会済みユーザー

退会済みユーザー

2018/11/30 06:24

ああ... すみません。勘違いしてました。 修正しますねー
00000000000

2018/11/30 07:57 編集

ありがとうございます! 教えてくださったコードで条件分岐できることは確認できましたが自分のコードでうまく再現できません。。。 質問修正します!
退会済みユーザー

退会済みユーザー

2018/11/30 08:30

修正されたコードにコメントをつけるような形で追記しました
00000000000

2018/11/30 09:01

とても助かります(T ^ T)ありがとうございます。 <% day = days.first.since(22.days) %>ここの意味がわかりません。 なんか調べても全然出てこない気がするんですが、、、
退会済みユーザー

退会済みユーザー

2018/11/30 09:04

days.first で最初の日付、今回であれば11月1日のデータが取得できます。 .since(22.days)でその日付から22日先のデータを取得します。つまり11月23日のデータです。 本当は範囲から一気に該当の日付を取得したかったんですが、方法がわからず...;
00000000000

2018/11/30 09:16 編集

なるほど、、 そうなんですね。 HTMLでは月の初めから終わりまでさっきのめんどくさい配列を一個ずつ書いて表示していたんですよね。 そのやり方だと月が変わった時の祝日を判定できない気がします。。。
00000000000

2018/12/02 10:29

buta_bottiさん 勘違いしていました。素直に言われた通りにやったらできました・・・ 本当に助かりました!ありがとうございました。またお願い致します!!!!
00000000000

2018/12/02 10:34

あ。。全て真っ赤になってました。。
退会済みユーザー

退会済みユーザー

2018/12/02 11:36

!Date.today.workday? がif文に含まれたままですかね? 今日、当日ではなく今日が営業日ではない 例えば今日のような日曜日にそのコードを実行すると 毎日が真っ赤になりますね。
00000000000

2018/12/02 13:19

今度こそ解決しました!!! 簡単な方法を教えてくださりありがとうございました! とても助かりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問