【问题标题】:Fluid compare dates流动比较日期
【发布时间】:2013-04-02 11:47:11
【问题描述】:

我想比较两个日期。我想创建一个条件来检查我数据库中的日期是否早于两天内的日期。

这是我的两个变量:

{<f:format.date format="d.m.Y">+2 days</f:format.date>}
{<f:format.date format="d.m.Y">{day.valid}</f:format.date>}

我想在模板中解决这个问题,而不是在模型或控制器中。

【问题讨论】:

    标签: typo3 fluid


    【解决方案1】:

    将您的日期分配给变量 »yourdate«。

    <f:if condition="{f:format.date(date: '+2 days', format: 'Y-m-d')} < {f:format.date(date: yourdate, format: 'Y-m-d')}">
        <f:then>
           yourdate is smaller than now + 2 days.
        </f:then>
        <f:else>
            yourdate is greater than or equal to now + 2 days.
        </f:else>
    </f:if>
    

    【讨论】:

    • 结尾的''不能被看到也不能被复制,即使它在那里。
    • 它需要一些空格
    【解决方案2】:

    这是我当前的解决方案,它添加了当前日期并使用内容中的日期进行一些计算。

    在控制器中,将当前日期添加到数据中:

    $this-&gt;view-&gt;assign('date_now', new \DateTime());

    这在流体中作为 {date_now} 可用:

    <f:if condition="{f:format.date(date: date_now, format: '(Y-m-d)')} > {f:format.date(date: '{event.date}-4 weeks', format: '(Y-m-d)')}">
       <f:then>
          <p>Event date is past</p>
       </f:then>
       <f:else>
          <p>Event date is upcoming</p>
       </f:else>
    </f:if> 
    

    注意右侧是如何进行一些计算的,附加引号和大括号 ('{event.date}-4 weeks')。

    PS 我更喜欢Y-m-d 格式而不是U 用于日期比较,因为我们不想比较当前时间——只是日期。

    【讨论】:

      【解决方案3】:

      使用format="U" 将日期转换为unix 时间戳并进行比较。您需要添加一个包含比较日期的变量。

      <f:if condition="{f:format.date(date: day.valid, format: 'U')} > {f:format.date(date: date_compare, format: 'U')}">
          Date is valid
      </f:if>
      

      【讨论】:

      • 根据传入的内容,这可能给您提供的不仅仅是日期,因为时间戳也会包含分钟。
      • ...所以如果你需要知道你是否只是在第二天,Y-m-d 更合适
      【解决方案4】:

      实际上:因为 DateTime 有一个getTimestamp 方法(http://php.net/manual/en/datetime.gettimestamp.php,自 5.3.0 起)完全符合 Fluid 中支持的 getter 方法命名,所以以下是完全可能的。给定 $date1 和 $date2 都是分配给模板的 DateTime 实例:

      <f:if condition="{date1.timestamp} < {date2.timestamp}">...</f:if>
      

      将两个日期作为 unix 时间戳整数进行比较,无需格式化日期。因此,对于您的情况,请从您的控制器操作中分配一个 $date = (new \DateTime('now'))-&gt;modify('+2 days');,并与 Fluid 中的进行比较。或者只是分配 time() 时间戳并直接与之比较,跳过 DateTime 的使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        • 2011-12-31
        • 2018-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多