web-dev-qa-db-ja.com

文字列の日付から年齢を計算する方法は?

ユーザーが誕生日を選択できるように、Symfonyフォームでbootstrap-material-datetimepickerを使用しています。

datetimepickerは、"Saturday 16 May 2020"などの文字列を返します。

その文字列の誕生日からユーザー(整数)のageを計算したいと思います!

年齢を計算するにはどうすればよいですか?文字列の代わりに日付時刻を日付または整数に戻す方法はありますか?

私のフォームのコード:

{% 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;
}
4
kolki

次の2つの選択肢があります。

  • 誕生日をdatetimeタイプのフィールドに変更し、フォームでBirthdayTypeを使用します。次に、コントローラで->format('Y-m-d')を使用してフィールドを文字列として表示するか、twigの|date('Y-m-d')フィルタを$user->getBirthday()で返すことで、フィールドをフォーマットする必要があります。 DateTimeオブジェクト。
  • 年齢を計算する場合は、そのフィールドの文字列から新しいDateTimeオブジェクトを作成します(例:new \DateTime($user->getBirthday())。

DateTimeオブジェクトがある場合、必要なのは「今日」の新しいオブジェクトを作成し、DateTimeオブジェクトの diff() メソッドまたはPHPの date_diff() 関数。

4
Tom Tom