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

o0lyfsai  于 2023-01-13  发布在  其他
关注(0)|答案(5)|浏览(325)

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

{% 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之间吗?

snvhrwxg

snvhrwxg1#

根据TWIG手册,您可以使用date函数。如果没有传递参数,则该函数返回当前日期
所以你的代码在TWIG中可能看起来像这样:

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

but5z9lq2#

在Twig(以及PHP)中使用\DateTime示例比较日期。
怎么了?
date('Y-m-d')函数返回格式化日期字符串
因此,您应该将其更改为$today = new \DateTime('today');并将此示例传递给Twig模板,或者直接在您的条件中使用date() Twig函数。
price_start_dateprice_end_date是我从数据库中得到的,它们的列类型是Date。
假设这两个(room.price_start_dateroom.price_end_date)是\DateTime的示例,那么您的Twig代码应该可以正常工作。

i7uq4tfw

i7uq4tfw3#

尝试使用日期函数: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) }}等,作为一种故障排除技术来调试实际日期。

xzv2uavs

xzv2uavs4#

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

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

4si2a6ki

4si2a6ki5#

为了简化,使用以下代码:
{%如果开始日期〈=检查日期且检查日期〈=结束日期%}
...您的代码
{% else %}
...您的代码
{%结束%}

相关问题