【问题标题】:how to check if today is between two dates in Twig?如何检查今天是否在 Twig 的两个日期之间?
【发布时间】:2017-05-11 01:37:35
【问题描述】:

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

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

【问题讨论】:

    标签: symfony twig octobercms


    【解决方案1】:

    根据 TWIG 手册,您可以使用date 函数。 如果未传递任何参数,则该函数返回当前日期

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

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

    【讨论】:

    • 实际上我将比较符号更改为` {% if date(room.price_start_date) date() %} ` 并且工作。非常感谢!
    • @AhmedEssam,谢谢,你是对的,我以正确的方式更新了比较标志。随意接受答案,希望对其他人也有帮助!
    • 这只有在同时设置了开始和结束时才有效。如果其中任何一个是“开放的”或 null 将无法正常工作。
    【解决方案2】:

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

    怎么了?

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

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

    price_start_dateprice_end_date 我从数据库中获取它们,它们的列的类型是日期。

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

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 1970-01-01
        • 2018-04-05
        相关资源
        最近更新 更多