我正在构建一个系统,其中显示用户的出生日期,以及该用户在一年的1月1日的年龄。因此,它会将Joe Bloggs的出生日期显示为10th October 1987
,然后显示当年1月1日该人的年龄(在这种情况下为25
)。
因为用户将显示在列表中,连同他们的全名和电子邮件地址,我希望能够使用Twig将他们的年龄显示为此信息的一部分。但是,我似乎无法理解如何实现这一目标。
答案 0 :(得分:6)
我认为您需要添加适当的Twig Filter才能将出生日期转为特定年龄。
查看文档的Extending Twig部分,您可能会注意到adding a new filter非常简单。
如何......
1 - 添加一个扩展\Twig_Extension
class customExtension extends \Twig_Extension {
2 - 通过覆盖getFilters()
方法
public function getFilters() {
return array(
'age' => new \Twig_Filter_Method($this, 'getAge'),
);
}
3 - 添加一些逻辑以获得给定出生日期的年龄
public function getAge($date)
{
if (!$date instanceof \DateTime) {
// turn $date into a valid \DateTime object or let return
return null;
}
$referenceDate = date('01-01-Y');
$referenceDateTimeObject = new \DateTime($referenceDate);
$diff = $referenceDateTimeObject->diff($date);
return $diff->y;
}
然后,按照以下方式调用您的过滤器
{{ yourDateOfBirthInstance | age }}
答案 1 :(得分:3)
通过创建一个Twig扩展SimpleFilter,您将能够:{{app.user.birthday | age}}
<?php
// src/You/YourBundle/Twig/AgeExtension.php
namespace You\YourBundle\Twig;
class AgeExtension extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('age', array($this, 'ageCalculate')),
);
}
public function ageCalculate(\DateTime $bithdayDate)
{
$now = new \DateTime();
$interval = $now->diff($bithdayDate);
return $interval->y;
}
public function getName()
{
return 'age_extension';
}
}
注册您的扩展程序
# src/You/YourBundle/Resources/config/services.yml
you.twig.age_extension:
class: You\YourBundle\Twig\AgeExtension
tags:
- { name: twig.extension }
使用它:
{{ user.birthday|age }}
答案 2 :(得分:1)
使用DateTime
类:
$januaryDate = date('01-m-Y');
$sDateBirth = '10th October 1987';
$oDateNow = new DateTime($januaryDate);
$oDateBirth = new DateTime($sDateBirth);
$oDateInterval = $oDateNow->diff($oDateBirth);
echo $oDateInterval->y;
输出:
25