今日の日付がデータベースの2つの日付の間にあるかどうかを確認したいと思います。これが私のコードです。
{% if today < room.price_start_date and today > room.price_end_date %}
<a href="{{'/'|app}}/book/{{room.id}}"><button type="button" class="btn btn-default btn-xs">Book this room</button></a>
{% else %}
<a href="{{'/'|app}}/contact"><button type="button" class="btn btn-default btn-xs">Book this room</button></a>
{% endif %}
today
変数は、次のコードから値を取得します。
$todayDate = date('Y-m-d');
$this['today'] = date('Y-m-d', strtotime($todayDate));
price_start_date
とprice_end_date
はデータベースから取得し、列のタイプはDate
です。
Twigでtoday
がroom.price_start_date
とroom.price_end_date
の間にあるかどうかを確認する方法はありますか?
TWIGマニュアルによると、 date
関数を使用できます。引数が渡されない場合、関数は現在の日付。
したがって、コードはTWIGでは次のようになります。
{% if date(room.price_start_date) < date() and date(room.price_end_date) > date() %}
{# condition met #}
{% endif %}
_\DateTime
_インスタンスを使用して、Twig(およびPHP))の日付を比較します。
なにが問題ですか?
date( 'Y-m-d') 関数は、フォーマットされた日付stringを返します。
したがって、これを$today = new \DateTime('today');
に変更し、このインスタンスをTwigテンプレートに渡すか、date()
Twigを使用する必要があります。あなたの状態で直接機能します。
_
price_start_date
_および_price_end_date
_をデータベースから取得し、それらの列のタイプは日付です。
これら2つの(_room.price_start_date
_と_room.price_end_date
_)が_\DateTime
_のインスタンスであるとすると、Twigコードは正常に機能するはずです。
日付関数を試してください: http://twig.sensiolabs.org/doc/functions/date.html
コードを少し変更する必要があるかもしれませんので、最善のアドバイスはできません。
EDIT#2
申し訳ありませんが、Twig日付関数のドキュメントを確認する機会がありませんでしたが、@ Yonelと@Farsideがそうだったのは良いことです。@ Yonelのポイントは、私が懸念していたものです、良い答えをする時間がありませんでした。
_\DateTime
_を使用している場合、これはコードの変更になります。
_{% if date() < date(room.price_start_date) and date() > date(room.price_end_date) %}
<a href="{{'/'|app}}/book/{{room.id}}">
<button type="button" class="btn btn-default btn-xs">Book this room</button></a>
{% else %}
<a href="{{'/'|app}}/contact">
<button type="button" class="btn btn-default btn-xs">Book this room</button></a>
{% endif %}
_
書式も改善しました。ユーザーがその時間枠内で部屋をクリックして予約できることを確認しているだけだと思います。そして、あなたのコードはよさそうだ。
DEV環境に{{ dump(room.price_start_date) }}
などを追加して、トラブルシューティングテクニックとして実際の日付がどのように見えるかをデバッグできます。
オープンデートソリューションの場合、@ Farsideソリューションを次のように少し拡張することを検討してください。
{% if ( date(room.price_start_date) is null or date(room.price_start_date) < date()) and
( date(room.price_end_date) is null or date(room.price_end_date) > date()) %}
{# condition met #}
{% endif %}
また、開始も終了も設定されていない場合は、範囲内のすべてが考慮されることも考慮してください。