【PHP】生まれてから何年何ヶ月何日を計算する方法

2021.11.10

この時期にしか食べられない、敷島堂の栗おこわ(激うま)を、今年も食べることが出来て満足しているキューロ小坂です。

先日、メルマガで仕事関連の記事を書きました。
その時に、ブログでは仕事関連の記事をまったく書いていないことに気がついたので、今回はPHPについて書いてみようと思います。

Webシステムを作成する際に、生まれてからの日にちを計算する必要が出てきました。しかも、何日ではなく、何年何ヶ月何日で表示しなくてはいけません。

うるう年があるし計算は結構面倒だなと思ったのですが、よくよく考えてみると何年何ヶ月何日の計算は、うるう年を気にする必要がありません。

function calculateBirthdays($date)
{
    // 誕生日のチェック(日付フォーマットと未来の誕生日を入力していないか確認)
    $format = 'Y-m-d';
    $d      = date_create_from_format($format, $date);
    if ($d && date_format($d, $format) === $date && $date < date('Y-m-d')) {
        // 本日の年月日を数値化
        $now_year  = idate('Y');
        $now_month = idate('m');
        $now_day   = idate('d');

        // 誕生日を年月日に分解
        $birthday       = explode('-', $date);
        $birthday_year  = (int)$birthday[0];
        $birthday_month = (int)$birthday[1];
        $birthday_day   = (int)$birthday[2];

        $result_year = 0;

        // 年を計算
        if ($now_year > $birthday_year) {
            $result_year = $now_year - $birthday_year;
            if ($now_month < $birthday_month || ($now_month === $birthday_month && $now_day < $birthday_day)) {
                $result_year--;
            }
        }

        // 何ヶ月を計算
        $result_month = $now_month - $birthday_month;
        if ($now_day < $birthday_day) {
            $result_month--;
        }
        if ($result_month < 0) {
            $result_month += 12;
        }

        // 日を計算
        if ($now_day >= $birthday_day) {
            $result_day = $now_day - $birthday_day;
        } else {
            if ($now_month - 1 < 1) {
                $y = $now_year - 1;
                $m = 12;
                $d = 1;
            } else {
                $y = $now_year;
                $m = $now_month - 1;
                $d = 1;
            }

            $ymd        = $y . '-' . $m . '-' . $d;
            $result_day = date('t', strtotime($ymd)) - ($birthday_day - $now_day);
        }

        $result = $result_year . '年' . $result_month . 'ヶ月' . $result_day . '日';
    } else {
        $result = '誕生日エラー';
    }

    return $result;
}

echo calculateBirthdays('1982-12-20');
出力:38年10ヶ月13日

誕生日を「年」「月」「日」に分解して、それぞれで計算すればOKです。

これで生まれてから何年何ヶ月何日が表示されると思います。

キューロ小坂でした。


🏢 株式会社ハジメクリエイトについて

この記事は、 株式会社ハジメクリエイト のエンジニアが執筆しました。


💻 Webシステム開発のプロフェッショナル

私たちは、ビジネスの成長をサポートするため、 PHPを用いたオーダーメイドのシステム開発 を提供しています。
お客様一人ひとりのニーズに応じたカスタムシステムを、 企画から開発・運用まで一貫してサポート
さらに、 React Nativeを活用したiOS/Android対応のアプリ開発 も得意としています。

単に「作る」だけでなく、
課題の本質に向き合い、最適な解決策を提案する のがハジメクリエイトのスタイルです。


🧑‍💻 一緒に働く仲間を探しています!

株式会社ハジメクリエイトでは、 自ら考え行動できるエンジニア を募集しています。
「私はこれがしたい!」という想いを持つあなた、一緒にモノづくりを楽しみませんか?

  • 技術で人の役に立ちたい
  • 意見が通る小さなチームで働きたい
  • フロントエンドもバックエンドも、いろいろ挑戦してみたい
  • お客さんと一緒にプロジェクトを育てたい

そんな気持ちがある方なら、きっと居心地のいい環境だと思います。
正社員はもちろん、パートタイムでの参加も歓迎中! 柔軟な関わり方で、あなたらしく働いてください。

👉 採用情報を見る
👉 お問い合わせはこちら


ちょっとでも「この会社、気になるな」と思ったら、ぜひお気軽にご連絡ください📩
最後まで読んでいただきありがとうございました!

  • PHP
  • Web技術
  • ソフト

この記事を書いた人

キューロ小坂

シニアエンジニア キューロ小坂

PhpStormのAIコード補間に「そうそう、今からそのコードを書こうと思ってたんよ。おまえ賢いな~。」とつぶやきながらコードを書いているプログラマーです。

キューロ小坂の書いた記事一覧へ

ハジメクリエイトでは一緒に働く仲間を募集しています!

関連記事