如何检查今天是否在 Twig 的两个日期之间?

how to check if today is between two dates in Twig?

我想检查今天的日期是否在数据库中的两个日期之间。这是我的代码。

{% 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 中检查 today 是否在 room.price_start_dateroom.price_end_date 之间吗?

试试日期函数: http://twig.sensiolabs.org/doc/functions/date.html

您可能需要稍微更改一下代码,所以我无法提供最好的建议。

编辑 #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) }} 等来调试您的实际日期,作为一种故障排除技术。

使用 \DateTime 个实例比较 Twig 中的日期(以及 PHP)。

怎么了?

date('Y-m-d') function returns a formatted date string.

因此,您应该将其更改为 $today = new \DateTime('today'); 并将此实例传递给 Twig 模板或直接在您的条件中使用 date() Twig 函数。

The price_start_date and price_end_date I get them from database and their columns' type is Date.

假设这两个(room.price_start_dateroom.price_end_date)是 \DateTime 的实例,那么您的 Twig 代码应该可以正常工作。

根据TWIG手册,可以使用date函数。 如果没有传递参数,函数returns 当前日期.

因此您的代码在 TWIG 中可能如下所示:

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

对于开放日期解决方案,请考虑如下扩展@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 %}

还要考虑到,如果既没有设置开始也没有设置结束,它将考虑范围内的所有内容。