年齢や勤続年数を「○歳○ヶ月」「○年○ヶ月」といった形式で表示したい場面は多くあります。たとえば、誕生日からの年齢をプロフィール画面に表示したり、入社日からの勤続年数を計算して表示するようなケースです。
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
クラスには和暦表示機能がないため、次のような方法があります。- IntlDateFormatter(
intl
拡張)を使うことで、簡単に和暦表示が可能です。 - 例:
'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 '大正以前'; }
- IntlDateFormatter(
- QPHPのどのバージョンから使えますか?
- A
DateTime::diff()
はPHP 5.3.0以降で利用可能です。
まとめ|○歳○ヶ月表示はDateTime::diff()で簡単に実装可能
- PHPで年齢や勤続年数などの年月差を出したい場合、
DateTime
とdiff()
を使えば簡単に実装できます。 - サンプルコードを応用すれば、あらゆる日付間の年月を柔軟に表示可能です。
- エラー処理や未来日への対応も、少しの工夫でカバーできます。
- 厳密な経過期間の判定が必要な場面では、差分の取得方法や表示形式を適宜調整しましょう。
「○歳○ヶ月」「○年○ヶ月」の表示処理を探している方は、ぜひこの方法を取り入れてみてください。