给定一些日期值,我想使用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") }}
,并使用给定的格式显示日期时间,除非它是午夜,只显示日期。
这是如何最好地完成的?
答案 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);
}));