我正在构建一个系统,其中显示用户的出生日期,以及该用户在今年 1 月 1 日的年龄。因此,它会将 Joe Bloggs 的出生日期显示为10th October 1987
,然后显示该人在当年 1 月 1 日的年龄(25
在这种情况下)。
因为用户将连同他们的全名和电子邮件地址一起显示在列表中,所以我希望能够使用 Twig 在此信息中显示他们的年龄。但是,我似乎无法理解如何实现这一目标。
我认为您需要添加适当的Twig 过滤器才能将给定的出生日期变成特定的年龄。
查看文档中的Extending Twig部分,您可能会注意到添加新过滤器非常简单。
如何 ...
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 }}
通过创建树枝扩展 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\YourBundle\Twig\AgeExtension:
class: You\YourBundle\Twig\AgeExtension
tags:
- { name: twig.extension }
要使用它:
{{ user.birthday|age }}
使用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