如何检查今天是不是在 Twig 的两个日期之间?
Posted
技术标签:
【中文标题】如何检查今天是不是在 Twig 的两个日期之间?【英文标题】: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_date
和 price_end_date
我从数据库中获取它们,它们的列类型是 Date
知道如何检查 Twig 中的 today
是否介于 room.price_start_date
和 room.price_end_date
之间吗?
【问题讨论】:
【参考方案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_date
和price_end_date
我从数据库中获取它们,它们的列的类型是日期。
假设这两个(room.price_start_date
和 room.price_end_date
)是 \DateTime
的实例,那么您的 Twig 代码应该可以正常工作。
【讨论】:
应该注意YYYY-MM-DD
日期字符串(date('Y-m-d')
)在PHP 3v4l.org/bCfZv和twig twigfiddle.com/opjcw8中是正确可比的【参考方案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 %
还要考虑到,如果既没有设置开始也没有设置结束,它将考虑范围内的所有内容。
【讨论】:
以上是关于如何检查今天是不是在 Twig 的两个日期之间?的主要内容,如果未能解决你的问题,请参考以下文章