给定某个日期值,我想使用 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") }}
,并且日期时间使用给定格式显示,除非是午夜,其中仅显示日期。
如何最好地做到这一点?
你可以做一些事情,将日期单独传递到时间,
datetime("m/d/Y", "g:i A")
然后将当前时间戳修改为 86400(以秒为单位的一天),如果它是 0,那么您知道现在是午夜,您可以显示"时间"参数而不仅仅是日期参数。
伪代码:
datetime(ts, day, time):
if (ts % 86400 == 0):
return format_ts(ts, day)
else:
return format_ts(ts, day + " " + time)
由于我是问这个问题的人,除非在接下来的 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);
}));