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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

3131閲覧

【Ruby/Rails】西暦なしの日付同士の比較&年1回のメッセージの表示/再表示

ta539tg70

総合スコア20

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/11/03 04:30

まず、ユーザー登録時にユーザーが好きな日にちを選べるとします。
毎年その日を過ぎたら「○月△日を過ぎています」とメッセージが表示され、OKボタンを押すとそのメッセージが消えるが、翌年またその日が巡ってくると同じメッセージが表示され、OKボタンを押すとまた消える...と繰り返すシステムを作りたいです。

これにはまず、西暦なしの今日の日付と、西暦なしのユーザーが選んだ日付の比較を行わなければいけないと思うのですが、いくら調べてもそのやり方が分かりませんでした。(Date.newで任意の日にちやDate.todayで今日の日付を取得できるのは分かるのですが、西暦情報が邪魔になってしまいます。)どうしたら西暦なしの日付同士を比較できますか?

また、「OKボタンを押すと今年分のメッセージは消えるが翌年また表示される」仕組みの考え方も思いつきません。フラグを立てて出し分ける?とも考えたのですが、0→1にしても来年はまた0になってないとダメだし...?などと思考がこんがらがってしまいます。考え方のヒントもしくはコードをご教示いただけますと幸いです。よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

これにはまず、西暦なしの今日の日付と、西暦なしのユーザーが選んだ日付の比較を行わなければいけないと思うのですが、いくら調べてもそのやり方が分かりませんでした。(Date.newで任意の日にちやDate.todayで今日の日付を取得できるのは分かるのですが、西暦情報が邪魔になってしまいます。)どうしたら西暦なしの日付同士を比較できますか?

単純に、日付から月と日にちを抜き出して、次のように比較してみては?
(※Rubyについては詳しくないので、もしかしたらいいメソッドやライブラリがあるかもしれませんが)

// 日付を比較します crntDate = Date.today isPast = (crntDate.mon > destDate.mon) || (crntDate.mon == destDate.mon && crntDate.mday > destDate.mday); // ポップを表示します if (isPast && !pushedOkButton) popNotification()

また、「OKボタンを押すと今年分のメッセージは消えるが翌年また表示される」仕組みの考え方も思いつきません。フラグを立てて出し分ける?とも考えたのですが、0→1にしても来年はまた0になってないとダメだし...?などと思考がこんがらがってしまいます。考え方のヒントもしくはコードをご教示いただけますと幸いです。よろしくお願い致します。

OKボタンを押した情報を日付として保存しては?その日付が去年であれば、まだOKボタンを押していないと判断できますよね?

投稿2018/11/03 04:51

編集2018/11/03 04:54
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ta539tg70

2018/11/03 05:08

なるほど、まず月を比較してみて、同月だった場合のみ日付まで比較する、という考え方ですね!参考になりました、ありがとうございます! OKボタンを押した日時を保存するのも良いですね。試しに実装してみようと思います。ありがとうございました。
ta539tg70

2018/11/03 05:30

今試してみて気付いたのですが、例えば今日が12月30日で、選んだ日付が1月1日だったら、人間的思考だと「まだ過ぎていない=1月1日は明後日」という認識になりますが、ご教示いただいたようなコードの比較の仕方だと「とっくに過ぎた=1月1日は約1年前」という認識になってしまいますね...。思わぬ穴にハマってしまいました。
退会済みユーザー

退会済みユーザー

2018/11/03 05:38

そうですねw 何かしらの予定日を扱うのであれば、回答のような比較でいいですが、1年という期間を扱うのであれば翌年の同日を過ぎたかどうかという比較にするといいのでは?ただし、閏日をどうするかについては考えたほうが良いかと。
ta539tg70

2018/11/03 06:26

なるほど、そうですね!少し検討してみます、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問