Twig datetime过滤器可以隐藏午夜时间

时间:2015-01-02 22:50:24

标签: php twig

给定一些日期值,我想使用Twig以某种给定格式显示日期。 http://twig.sensiolabs.org/doc/filters/date.html提供了大部分此功能。

现在,我想前进一步,如果somedate等于2015-01-21 00:00:00(即午夜),则不显示时间,只显示日期。

我提出了一个部分解决方案,其中{{ somedate|datetime(true) }}用于显示日期时间可能有几秒,但是,我的解决方案很弱,因为格式无法修改。

$twig->addFilter(new Twig_SimpleFilter('datetime', function ($d,$s=null) {
    $f='m/d/Y'.((strlen($d)==19 && substr($d, -8)!='00:00:00')?' g:i'.(($s)?':s':null).' A':null);
    $date = new DateTime($d);
    return $date->format($f);
}));

我想修改过滤器,以便提供一种格式,例如{{ data.bid_date|datetime("m/d/Y g:i A") }},并使用给定的格式显示日期时间,除非它是午夜,只显示日期。

这是如何最好地完成的?

2 个答案:

答案 0 :(得分:0)

你可以做一些日期单独传递到时间的事情,

datetime("m/d/Y", "g:i A")

然后将当前时间戳修改为86400(一天,以秒为单位),如果它为0,那么您知道它是午夜时间,您可以显示"时间" param而不仅仅是日期参数。

伪代码:

datetime(ts, day, time):
    if (ts % 86400 == 0):
        return format_ts(ts, day)
    else:
        return format_ts(ts, day + " " + time)

答案 1 :(得分:0)

由于我是提出这个问题的人,除非在接下来的40天内没有更好的答案,否则我不会选择以下内容。

$twig->addFilter(new Twig_SimpleFilter('datetime', function ($d,$f='m/d/Y g:i:s A') {
    $f=(strlen($d)==19 && substr($d, -8)=='00:00:00')?substr($f, 0, strpos($f, ' ')):$f;
    $date = new DateTime($d);
    return $date->format($f);
}));