我想检查今天的日期是否在数据库的两个日期之间。这是我的代码。
{% 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
我从数据库及其列中获取了这些内容&#39;类型为Date
知道如何检查Twig中的today
和room.price_start_date
之间是否有room.price_end_date
吗?
答案 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_date
和price_end_date
我从数据库及其列中获取了这些内容&#39;类型是日期。
假设这两个(room.price_start_date
和room.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 %}
还要考虑到,如果未设置开始或结束,则将考虑范围内的所有内容。