私はあなたを助けることができる何かが見つかりました:それはあなたが:)
PS欲しいもののために新しい小枝の拡張を作成だoverriding the built in twig date filter
を:その後で、それはPHPのDateTime
<?php
/*
* Extension to provide updated date & date_modify filters along with an
* updated date function which do not auto-convert strings of numbers to
* a unix timestamp.
*
* Code within dateFilter(), modifyFilter() and dateFromString() extracted
* from Twig/lib/Twig/Extension/Core.php which is (c) 2009 Fabien Potencier
* and licensed as per https://github.com/twigphp/Twig/blob/master/LICENSE
*/
namespace My\Twig\Extension;
use Twig_Extension;
use Twig_SimpleFilter;
use Twig_SimpleFunction;
use DateTime;
use DateTimeInterface;
use DateTimeImmutable;
class DateExtension extends Twig_Extension
{
public function getName()
{
return 'my_date';
}
public function getFilters()
{
return array(
new Twig_SimpleFilter('date', [$this, 'dateFilter'],
['needs_environment' => true]),
new Twig_SimpleFilter('date_modify', [$this, 'modifyFilter'],
['needs_environment' => true]),
);
}
public function getFunctions()
{
return array(
new Twig_SimpleFunction('date', [$this, 'dateFromString'],
['needs_environment' => true]),
);
}
public function dateFilter($env, $date, $format = null, $timezone = null)
{
if (null === $format) {
$formats = $env->getExtension('core')->getDateFormat();
$format = $date instanceof DateInterval ? $formats[1] : $formats[0];
}
if ($date instanceof DateInterval) {
return $date->format($format);
}
return $this->dateFromString($env, $date, $timezone)->format($format);
}
public function modifyFilter($env, $date, $format = null, $timezone = null)
{
$date = $this->dateFromString($env, $date, false);
$date->modify($modifier);
return $date;
}
public function dateFromString($env, $date, $timezone)
{
// determine the timezone
if (!$timezone) {
$defaultTimezone = $env->getExtension('core')->getTimezone();
} elseif (!$timezone instanceof DateTimeZone) {
$defaultTimezone = new DateTimeZone($timezone);
} else {
$defaultTimezone = $timezone;
}
// immutable dates
if ($date instanceof DateTimeImmutable) {
return false !== $timezone ? $date->setTimezone($defaultTimezone) : $date;
}
if ($date instanceof DateTime || $date instanceof DateTimeInterface) {
$date = clone $date;
if (false !== $timezone) {
$date->setTimezone($defaultTimezone);
}
return $date;
}
$date = new DateTime($date, $defaultTimezone);
if (false !== $timezone) {
$date->setTimezone($defaultTimezone);
}
return $date;
}
}
を返す終了このクラスは、新しいdate、date_modifyフィルタ、および新しい 日付関数を登録して、Twigコアのものを置き換えます。次に、関数twig_date_format_filter、twig_dateのコピー を直接コピーします。 _modify_filter および上記の機能を削除したtwig_date_converter。
私も使ってTwig_Environment でこの拡張機能を登録するために必要な:
$env->addExtension(new \My\Twig\Extension\DateExtension());
と私は終わりです。
{{ "20141216"|date('jS F Y') }}
{{ "20141216"|date('jS F Y') }}
は正しく出力されます、それは私ができる恥だけでなく、 オーバーライドtwig_date_converter
ながら2014年12月16日2014年12月16日
だ、私は再登録ができることをうれしく思います related Twig
フィルタと機能。
'date'フィルタ/関数を使用しようとしましたか? –
@RuslanOsmanov '112016'は週の形式であることをどうやって知っていますか?私はソース形式で与えることはできません。 – Peter
ここで 'date'を使うことはできないようです。しかし、あなたは '$ dateString'を' date'に適した形式に変換するべきだと思います。それ以外の場合は、独自のフィルタ/関数を記述する必要があります。 –