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

时间:2016-12-26 16:23:30

标签: symfony twig octobercms

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

{% 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我从数据库及其列中获取了这些内容&#39;类型为Date

知道如何检查Twig中的todayroom.price_start_date之间是否有room.price_end_date吗?

4 个答案:

答案 0 :(得分:13)

根据TWIG手册,您可以使用date功能。 如果没有传递参数,则函数返回当前日期

所以你的代码在TWIG中看起来像这样:

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

答案 1 :(得分:1)

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

有什么问题?

  

date('Y-m-d')函数返回格式化日期字符串

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

  

price_start_dateprice_end_date我从数据库及其列中获取了这些内容&#39;类型是日期。

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

答案 2 :(得分:0)

尝试日期功能: 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) }}等,以调试实际日期的故障排除技术。

答案 3 :(得分:0)

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

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