- ベストアンサー
CakePHPで毎年同じ月日を判定する方法
- 毎年ある時期がくると「開催中」という文字が自動表示される処理を考えているのですが、うまく表示できずに悩んでいます。
- 具体的にいうと、DATE型の「start」と「end」フィールドを今日の日付とを比較し、「start」と「end」の期間中であればそのテーブルに含まれる文字列(title)を表示するという具合です。
- 年に関係なく、月日だけで繰り返し判断するにはどうすればよいのか、ぜひご教示ください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
すみません。そんな処理はすっぽり抜けてましたね。 まず、 startとendが入力された場合に、 start = 11月 end = 2月 など、多い数値から少ない数値まで、と入力された場合は、 2000-11から 2001-02まで というようにデータベースに登録し、 当てる月を、 2000-5 または 2001-5 を検索してやれば要件を満たせそうです。 CakePHPであれば、 <?php $date = date('2000-m-d', time()); $date2=date('2001-m-d', time()); $conditions = array( 'or' => array( array('hoge.start <' => $date,'hoge.end >' => $date), array('hoge.start <' => $date2,'hoge.end >' => $date2), ), ); ?> とすれば、それぞれがOR条件に出来ます。 ※一応紙に、タイムライン引いて大丈夫そうか確認してみたんですけど、質問者さんも一度確認してみてください・・・
その他の回答 (1)
- hogehoge78
- ベストアンサー率80% (433/539)
深い部分での意図を外しているかもしれませんが、 まず、startとendに入力される値と、検索する場合の値を考えた場合に、 入力値の年を必ず固定し、検索値の値も必ず固定するようにしてしまえばいいのではないですか? 例えばstart/endに入力させるフォーム項目は、月と日だけにして、保存時に、「2000」年を付加して保存 検索値も、 <?php $date = date('2000-m-d', time()); ?> などとして年は無視した値を検索してやるとか。 どうでしょう。
補足
hogehoge78様 ご回答ありがとうございます。 おっしゃるとおり年を固定したらうまくいったのですが、年をまたぐとうまく拾えません。 もし、そんな場合のシンプルな対象法をご存じでしたらご教示いただけますでしょうか。
お礼
早速のご回答ありがとうございます。 おかげさまで無事に動作しました。 こんなときは「or」でいいんですね。 恥ずかしながらまったく気がつきませんでした。 貴重なお時間を割いてくださり本当にありがとうございました。