如何从字符串日期计算年龄?

How to calculate age from a string date?

我在我的 Symfony 表单上使用 bootstrap-material-datetimepicker 这样用户就可以 select 他的生日。

datetimepickerreturn是一个字符串,例如"Saturday 16 May 2020"

我想根据那个字符串生日计算用户(整数)的age

如何计算年龄? 有没有办法让日期时间 return 日期或 int 而不是字符串?

我的表单代码:

{% extends 'base.html.twig' %}
{% block body %}

        {{ form_start(form, {attr: {novalidate: 'novalidate'}}) }}

               <div class="form-line">
                    {{ form_widget(form.birthday,  {'attr': {'class': 'datepicker form-control', 'placeholder': 'Date of Birth'} }) }}      
               </div>

         {{ form_rest(form) }}
         {{ form_end(form) }}        


{% endblock %}

实体代码:

/**
 * @ORM\Column(type="string", nullable=true)
 */
private $birthday;

public function getBirthday(): ?string
{
    return $this->birthday;
}

public function setBirthday(?string $birthday): self
{
    $this->birthday = $birthday;

    return $this;
}

您有 2 个选择:

  • 将生日更改为日期时间类型的字段并使用 BirthdayType 在你的表格中。然后,您必须在需要时格式化该字段 在控制器中或使用 ->format('Y-m-d') 将其显示为字符串 twig 的 |date('Y-m-d') 过滤器作为 $user->getBirthday() 会给你一个 DateTime 对象。
  • 从该字段中的字符串创建一个新的 DateTime 对象 想计算年龄(即:new \DateTime($user->getBirthday())。

有了 DateTime 对象后,您只需为“今天”创建一个新对象,然后使用 DateTime 对象的 diff() method or PHP's date_diff() 函数计算与那里的差异。