Web開発

【PHP】○歳○ヶ月・○年○ヶ月を表示する方法|DateTimeとdiffの使い方を解説

スポンサーリンク

年齢や勤続年数を「○歳○ヶ月」「○年○ヶ月」といった形式で表示したい場面は多くあります。たとえば、誕生日からの年齢をプロフィール画面に表示したり、入社日からの勤続年数を計算して表示するようなケースです。

PHPでは、DateTimeクラスとそのdiff()メソッドを使うことで、こうした年月の差分を簡単に求めることができます。

この記事では、PHPで○歳○ヶ月・○年○ヶ月を表示する方法を、初心者にも分かりやすいコード例付きで解説します。


PHPで○歳○ヶ月・○年○ヶ月を表示するには?

主に使うクラスとメソッド

  • DateTimeクラス:日付をオブジェクトとして扱うことができます。
  • diff()メソッド:2つのDateTimeオブジェクトの差分を取得できます。
  • format()メソッド:取得した差分を任意の形式で整形します。

年月差を取得するには、次のようなフォーマット指定子を使います:

  • %y:年の差
  • %m:月の差
  • %d:日の差

DateTime::diff() で得られる年月は、暦的な差分です。「実際に満○歳になっているか」など厳密な計算が必要な場面では、日数比較や独自ロジックが必要です。


基本のサンプルコード(年齢表示)

以下は、誕生日から現在の年齢を「○歳○ヶ月」の形式で表示するコードです。

<?php
// 現在日時
$now = new DateTime();

// 誕生日(基準日)
$birthday = new DateTime('1982-04-01');

// 現在日時と基準日の差分
$interval = $now->diff($birthday);

// 表示
echo $interval->format('%y歳%mヶ月');
?>

実行例(2025年7月現在)

43歳3ヶ月

○年○ヶ月の「歴(経過年数)」を表示する応用例

誕生日以外にも、入社日や利用開始日からの「○年○ヶ月」を表示する場面は多いです。

勤続年数などの例

<?php
// 現在日時
$now = new DateTime();

// 入社日(基準日)
$startDate = new DateTime('2020-10-15');

// 現在日時と基準日の差分
$interval = $now->diff($startDate);

// 表示
echo $interval->format('%y年%mヶ月');
?>

出力例

4年9ヶ月

このように、基準となる日付を変えるだけで応用が利きます。


注意点とよくある質問

Q
未来の日付を渡すとどうなる?
A

diff()メソッドは、未来日を渡すとマイナスの差分となります。その場合、$interval->invert プロパティが 1(逆方向)になります。

if ($interval->invert) {
echo '未来の日付です';
} else {
echo $interval->format('%y年%mヶ月');
}
Q
日数も含めて表示するには?
A

format()メソッドに%dを加えることで「○年○ヶ月○日」と詳細な差分も表示できます。

$interval->format('%y年%mヶ月%d日');
Q
和暦で表示したいときは?
A

PHPの標準DateTimeクラスには和暦表示機能がないため、次のような方法があります。

  • IntlDateFormatterintl拡張)を使うことで、簡単に和暦表示が可能です。
  • 例: 'ja_JP@calendar=japanese' を指定すると、「令和○年」などの形式で出力できます。
<?php
$formatter = new IntlDateFormatter(
    'ja_JP@calendar=japanese',
    IntlDateFormatter::LONG,
    IntlDateFormatter::NONE,
    'Asia/Tokyo',
    IntlDateFormatter::GREGORIAN,
    'Gy年M月d日'
);
$date = new DateTime('1982-04-01');
echo $formatter->format($date);
?>

出力例:

昭和57年4月1日
  • intl拡張が使えない環境の場合は、和暦変換の自作関数で対応する方法もあります。
function convertToWareki($date) {
    $y = (int)$date->format('Y');
    if ($y >= 2019) return '令和' . ($y - 2018) . '年';
    if ($y >= 1989) return '平成' . ($y - 1988) . '年';
    if ($y >= 1926) return '昭和' . ($y - 1925) . '年';
    return '大正以前';
}
Q
PHPのどのバージョンから使えますか?
A

DateTime::diff()はPHP 5.3.0以降で利用可能です。


まとめ|○歳○ヶ月表示はDateTime::diff()で簡単に実装可能

  • PHPで年齢や勤続年数などの年月差を出したい場合、DateTimediff()を使えば簡単に実装できます。
  • サンプルコードを応用すれば、あらゆる日付間の年月を柔軟に表示可能です。
  • エラー処理や未来日への対応も、少しの工夫でカバーできます。
  • 厳密な経過期間の判定が必要な場面では、差分の取得方法や表示形式を適宜調整しましょう。

「○歳○ヶ月」「○年○ヶ月」の表示処理を探している方は、ぜひこの方法を取り入れてみてください。

タイトルとURLをコピーしました