如何检查今天是不是在 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_dateprice_end_date 我从数据库中获取它们,它们的列类型是 Date

知道如何检查 Twig 中的 today 是否介于 room.price_start_dateroom.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_dateprice_end_date 我从数据库中获取它们,它们的列的类型是日期。

假设这两个(room.price_start_dateroom.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 的两个日期之间?的主要内容,如果未能解决你的问题,请参考以下文章

比较 NSDates 以检查今天是不是介于两者之间

SQL函数检查日期是不是在另一个表的2个日期之间

检查当前日期是不是在两个日期之间 Oracle SQL

sql 条件检查今天是两个日期之间

需要 mongodb 查询来检查日期是不是在存储在集合文档中的两个日期之间[重复]

检查日期是不是在另一个数据框中的两个日期之间,如果是则操作日期