web-dev-qa-db-ja.com

今日がTwigの2つの日付の間にあるかどうかを確認する方法

今日の日付がデータベースの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_dateprice_end_dateはデータベースから取得し、列のタイプはDateです。

Twigでtodayroom.price_start_dateroom.price_end_dateの間にあるかどうかを確認する方法はありますか?

11
Ahmed Essam

TWIGマニュアルによると、 date 関数を使用できます。引数が渡されない場合、関数は現在の日付

したがって、コードはTWIGでは次のようになります。

{% if date(room.price_start_date) < date() and date(room.price_end_date) > date() %}
  {# condition met #}
{% endif %}
14
Farside

_\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コードは正常に機能するはずです。

1
yceruto

日付関数を試してください: 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) }}などを追加して、トラブルシューティングテクニックとして実際の日付がどのように見えるかをデバッグできます。

0
Alvin Bunk

オープンデートソリューションの場合、@ 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 %}

また、開始も終了も設定されていない場合は、範囲内のすべてが考慮されることも考慮してください。

0
Mbotet