我想检查一下今天的日期是否在数据库中的两个日期之间。这是我的代码。
{% 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
之间吗?
5条答案
按热度按时间snvhrwxg1#
根据TWIG手册,您可以使用
date
函数。如果没有传递参数,则该函数返回当前日期。所以你的代码在TWIG中可能看起来像这样:
but5z9lq2#
在Twig(以及PHP)中使用
\DateTime
示例比较日期。怎么了?
date('Y-m-d')函数返回格式化日期字符串。
因此,您应该将其更改为
$today = new \DateTime('today');
并将此示例传递给Twig模板,或者直接在您的条件中使用date()
Twig函数。price_start_date
和price_end_date
是我从数据库中得到的,它们的列类型是Date。假设这两个(
room.price_start_date
和room.price_end_date
)是\DateTime
的示例,那么您的Twig代码应该可以正常工作。i7uq4tfw3#
尝试使用日期函数:http://twig.sensiolabs.org/doc/functions/date.html
你可能需要稍微修改一下代码,所以我不能给出最好的建议。
编辑#2
抱歉,我没有机会查看关于Twig日期函数的文档,但@Yonel和@Farside这样做很好。@Yonel的观点是我关心的,没有时间给予一个好的答案。
如果您使用的是
\DateTime
,则代码更改如下:我也改进了格式。我想你只是检查用户是否可以在那个时间段内点击预订房间。你的代码看起来不错。
您可以在DEV环境中添加
{{ dump(room.price_start_date) }}
等,作为一种故障排除技术来调试实际日期。xzv2uavs4#
对于开放日期解决方案,请考虑稍微扩展@Farside解决方案,如下所示:
还要考虑到,如果没有设置开始或结束,它将考虑范围内的所有内容。
4si2a6ki5#
为了简化,使用以下代码:
{%如果开始日期〈=检查日期且检查日期〈=结束日期%}
...您的代码
{% else %}
...您的代码
{%结束%}