如何检查今天是否在 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_date
和 price_end_date
我从数据库中获取它们,它们的列类型是 Date
知道如何在 Twig 中检查 today
是否在 room.price_start_date
和 room.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_date
和 room.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 %}
还要考虑到,如果既没有设置开始也没有设置结束,它将考虑范围内的所有内容。
我想检查今天的日期是否在数据库中的两个日期之间。这是我的代码。
{% 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_date
和 price_end_date
我从数据库中获取它们,它们的列类型是 Date
知道如何在 Twig 中检查 today
是否在 room.price_start_date
和 room.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
andprice_end_date
I get them from database and their columns' type is Date.
假设这两个(room.price_start_date
和 room.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 %}
还要考虑到,如果既没有设置开始也没有设置结束,它将考虑范围内的所有内容。