MENU

JavaScript日付・時刻

【JavaScript】 生年月日から年齢を求めるいくつかの方法

更新日:2021/05/12

 

ここでは生年月日から年齢を計算する方法を2つ紹介します。
その前に、年齢についての定義についても把握しておきましょう。

 

年齢の定義

 

毎年誕生日が来れば歳を取る。
これは常識ですが、プログラムコードとして落とし込む場合は、常識なんて捨てる必要があります。

 

すなわち、ちゃんと裏どりをしましょうねということ。

 

で調べてみました。

 

まずはこれ。

 

① 年齢ハ出生ノ日ヨリ之ヲ起算ス
② 民法第百四十三条ノ規定ハ年齢ノ計算ニ之ヲ準用ス
③ 明治六年第三十六号布告ハ之ヲ廃止ス
e-gov法令検索:年齢計算ニ関スル法律より

 

明治35年に布告された3行しかない法律です。
②で民法第百四十三条を見ろと言ってます。

 

第百四十三条 週、月又は年によって期間を定めたときは、その期間は、暦に従って計算する。

2 週、月又は年の初めから期間を起算しないときは、その期間は、最後の週、月又は年においてその起算日に応当する日の前日に満了する。ただし、月又は年によって期間を定めた場合において、最後の月に応当する日がないときは、その月の末日に満了する。
e-gov法令検索:民法より

 

2を年齢計算に当てはめて要約すると、『生まれた日(起算日)の前日で一年の区切り(満了)とする』となります。
生まれた時間は関係がないということですね。

 

また、うるう年に生まれた人は4年に一回しか歳をとらないのか?という話題が時々出ますが、28日の最後(24時)に年齢が加算されているので、うるう年とか全く関係ないのです。

年齢計算例

 

JavaScriptでの年齢計算の方法はいくつかあります。
一応学習目的の記事なので、効率を考えずに挙げてみます。

 

なおコード中の関数は、引数として生まれた日と計測する日をDateオブジェクトで受け取る形に統一してあります。
Dateオブジェクトについては、次の記事を読んでみてください。
【JavaScript】 日時と時刻を取得して表示してみる

 

単純に年から求める

 

まず、開始年から終了年までの年数を求めます。
この年数は終了年を含んでいるので、誕生日まで到達していない場合、1を減算しています。

 


const birthdate = "2020/2/29";

const ageCalculation = ( birthDate , nowDate ) => {
    const age = nowDate.getFullYear() - birthDate.getFullYear();
    const thisYearsBirthday  = new Date( nowDate.getFullYear() , birthDate.getMonth() , birthDate.getDate() );
    return age + ( thisYearsBirthday.getTime() > nowDate.getTime() ? -1 : 0 );
}

const age = ageCalculation( new Date(birthdate) , new Date() );

console.log( age + "歳" );

 

上のコードではnowDateがうるう年でない場合、thisYearsBirthdayが3月1日0時0分0秒に設定されます。
nowDateがthisYearsBirthday以上なら、誕生日が過ぎていることになります。

 

つまり、うるう年は特に気にしなくても大丈夫です。

 

 

なおageCalculation関数を3項演算子を駆使して一文にしてみます。

 


const ageCalculation = ( birthDate , nowDate ) =>
    nowDate.getFullYear() - birthDate.getFullYear()  +
    ( new Date( nowDate.getFullYear() , birthDate.getMonth() , birthDate.getDate() ).getTime()
        > nowDate.getTime() ? -1 : 0 );

 

こちらの方が、JavaScriptしている気になりますね!

 

年月日を数値に変換して減算する

 

年月日を年4桁月・日を各2桁の合計8桁の数値に変換して、その値を減算し、10000で割ると年数が計算できます。

 


const birthdate = "2020/2/29";

const ageCalculation = ( birthDate , nowDate ) => {
    const birthNumber = birthDate.getFullYear() * 10000 
                               + (birthDate.getMonth() + 1 ) * 100 
                               + birthDate.getDate();
    const nowNumber = nowDate.getFullYear() * 10000 
                               + (nowDate.getMonth() + 1 ) * 100 
                               + nowDate.getDate();

    return Math.floor( (nowNumber - birthNumber) / 10000 );
}

const age = ageCalculation( new Date(birthdate) , new Date() );

console.log( age + "歳" );

 

単純な計算のみで年齢を算出できます。

 

本当かな?と疑ってしまうのが正常な反応です。
ご自分で検証してみてください。

 

年ごとの誕生日の曜日を表示

 

最後に、現在までの年毎の年齢と誕生日及び曜日を表示してみます。

 


const birthdate = "2020/2/29";

const birthDayList = ( birthDate , nowDate ) => {
    const result = [];
    const [birthYear,birthMonth,birthDay] = 
                  [birthDate.getFullYear(),birthDate.getMonth(),birthDate.getDate()];
    const [nowYear,nowStumpTime] = 
                  [nowDate.getFullYear(),nowDate.getTime()];

    for( let year = birthYear ; year <= nowYear ; year ++ ){
        const date = new Date( year , birthMonth, birthDay );
        result.push({
            birthDay : `${date.getFullYear()}年${date.getMonth()+1}月${date.getDate()}日`,
            week: ["日","月","火","水","木","金","土"][date.getDay()],
            birthFlg: date.getTime() <= nowDate
        })
    }
    return result;
}

const ageList = birthDayList( new Date(birthdate) , new Date() );

ageList.forEach( (birthData,index) =>
    console.log( `${index}歳 誕生日${birthData.birthDay}(${birthData.week})${birthData.birthFlg ? "" : "誕生日前です"}` )
);

 

単純に誕生年から現在までループをして、その年の誕生日と曜日を取得しているだけです。

 

デモ

 

生年月日:年 月 

 

けーちゃんおススメJavaScript入門書

  • スラスラ読める JavaScript ふりがなプログラミング
  • プログラム未経験者がJavaScript始めるならコレ!
    コードを掲載して自分で理解しろという投げっぱなしな入門書とは異なり、コードに一つ一つどんなことをやっているかをふりがなという形式で解説しています。
    それでいてJavaScriptの基礎と応用を学べる良書です。
  • これからWebをはじめる人のHTML&CSS、JavaScriptのきほんのきほん
  • JavaScriptの機能を実践で活かすにはHTMLやCSSの知識が不可欠です。
    しかしそれらの知識があることが前提として書かれている書籍が多い中、この本は総合的な知識を身に着けることができます。
    HTMLやCSSの知識も不安な方には、ぴったりの一冊です
  •  

    入門書の役割は、自分のやりたいことをネットで調べることができるようになるための、基礎的な知識の獲得です。
    まずはこれらの本でしっかりと基礎知識を身につけましょう。
    そしてもっと高度なことや専門的なことはネットで調べ、情報が足りないと感じたら書籍を購入してください。


    期間限定情報:
    6/21と6/22は年に一度のプライム会員大感謝祭!
    欲しかったアレが安く手に入るチャンスです
    忘れずにチェックしてください!
    僕は以前のタイムセール祭りで4Kモニタが買ったけど、それより安かったらどうしよう・・・

    ちなみにプライム会員でなくても、無料体験で参加できるようです。
    欲しい商品があるか、確認だけでもしておきましょう。

    記事の内容について

     

    こんにちはけーちゃんです。
    説明するのって難しいですね。


    「なんか言ってることおかしくない?」
    たぶん、こんなご意見あると思います。

    裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。

    そんなときは、ご意見もらえたら嬉しいです。

    ご意見はこちら。
    https://note.affi-sapo-sv.com/info.php

    【お願い】

    お願い

    ■このページのURL


    ■このページのタイトル


    ■リンクタグ


    ※リンクして頂いた方でご希望者には貴サイトの紹介記事を作成してリンクを設置します。
    サイト上部の問い合わせよりご連絡ください。
    ただしサイトのジャンルによっては、お断りさせていただくことがあります。