質問: new DateTime($getContests[$i]['accept_end_date']); if($cntStart >= $today && $cntEnd <= $today) { $status += array($i=>"開催中"); }else if($acStart >= $today && $acEnd <= $today){ $status += array($i=>"受付中"); } } ``` 以上、よろしくお願いいたします。
回答: その他の部分は意図通りに動いていると言うことが前提ですが、この`if`文の部分: ``` if($cntStart >= $today && $cntEnd <= $today) { $status += array($i=>"開催中"); }else if($acStart >= $today && $acEnd <= $today){ $status += array($i=>"受付中"); } ``` > > `$cntStart >= $today` 現在日時が開始日時より前 > > > かつ > > > `$cntEnd <= $today` 現在日時が終了日時より後 > > > と言う条件になっています。`$cntStart < $cntEnd`が成り立っているということで、これでは決して条件が真にはなりません。 (単純化した整数比較でいうと、`x <= 3 && 5 <= x`が決して真にならないのと同じ。) `$today`がある日付範囲に入っていることを判定したいのであれば、次のようになるはずではないでしょうか。 ``` if( $cntStart <= $today && $today <= $cntEnd ) { $status += array($i=>"開催中"); } else if( $acStart <= $today && $today <= $acEnd ) { $status += array($i=>"受付中"); } ``` `$status += array($i=>"開催中");`という配列操作の書き方も、私の趣味に合わないのですが、動作としては問題無いはずなのでそのままにしておきます。一般的に、このように範囲判定の条件を書く場合には、不等号を`<=`(または`<`)だけに統一した方が間違いが少ないように思います。