【问题标题】:Smarty if statement with date?带有日期的Smarty if语句?
【发布时间】:2012-02-17 00:33:06
【问题描述】:

如果我有一个聪明的变量

{$test.date_created}

在 smarty 模板中显示日期,例如:

2012 年 2 月 2 日

在 smarty 网站上,它说您可以使用以下内容显示今天的日期。

{$smarty.now|date_format:'%m/%d/%Y'}

我如何在 if 语句中使用它来显示从今天起 3 天或更长时间的消息?

如果是 3 天或更长时间,则显示“旧”。如果没有,则显示“新”。

【问题讨论】:

    标签: smarty


    【解决方案1】:

    您可以使用strtotime()获取三天前对应的时间戳,然后将其与您的消息日期进行比较。例如,假设$message 是您的消息记录,$message['date'] 是您必须检查的时间戳:

    $isMessageOld = ($message['date'] <= strtotime('-3 days'));
    $smarty->assign('isMessageOld', $isMessageOld);
    

    然后,在您的模板中:

    {if $isMessageOld} ... {/if}
    

    我不是 100% 确定,但您也可以直接在 Smarty 中进行测试。假设您已将 $message 传递给 Smarty:

    {if $message.date <= strtotime('-3 days')} ... {/if}
    

    【讨论】:

      【解决方案2】:

      您可以使用 $smarty.now 轻松检查 smarty 中已经过去的日期

      $smarty.now|date_format:"%Y%m%d"
      

      这是一个跨越旧(通过)日期的示例

      <{foreach from=$meetings item=m}>
      <{if $smarty.now|date_format:"%Y%m%d" <= $m.date|date_format:"%Y%m%d"}>
        <tr>
          <td><{counter}></td>
          <td><{$m.title}> on </td>
          <td><{$m.date}></td>
        </tr>
      <{else}>
        <tr>
          <td><strike><{counter}></strike></td>
            <td><strike><{$m.title}> on </strike></td>
            <td><strike><{$m.date}></strike></td>
        </tr>
      <{/if}>
      <{/foreach}>
      

      我们需要在 php 中创建会议列表数组并在 smarty 中分配它

      $meetings[0]['title'] = "Speech on Gandhi Janyanti";
      $meetings[0]['date'] = "2-Oct-2011";
      $meetings[1]['title'] = "Meet friend";
      $meetings[1]['date'] = "10-Oct-2013";
      $meetings[2]['title'] = "Goto USA";
      $meetings[2]['date'] = "22-Oct-2013";
      $meetings[3]['title'] = "Speech on Gandhi Janyanti";
      $meetings[3]['date'] = "2-Oct-2014";
      $meetings[4]['title'] = "Meeting with John";
      $meetings[4]['date'] = "22-Oct-2014";
      $meetings[5]['title'] = "Speech on Gandhi Janyanti";
      $meetings[5]['date'] = "2-Oct-2015";
      $meetings[6]['title'] = "Meeting with Uncle";
      $meetings[6]['date'] = "22-Oct-2015";
      
      $theme->assign("meetings",$meetings);
      echo $theme->fetch("index.tpl");
      

      【讨论】:

      • 很好,但你最好这样做:{if $smarty.now &lt;= $m.date.value|@strtotime}
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多