JavaScriptで生年月日から年齢を計算する簡単ロジック」(以下「簡単ロジック」)の考え方が、ビット演算でも使えることに気づいたのでご紹介します。

「簡単ロジック」の考え方

「簡単ロジック」では、生年月日をつぎのような8桁の10進数に揃えます。

yyyymmdd

そして、同じく8桁にした現在日付から差し引くのです。すると、下4桁は意味のない数字になります。けれど、頭の4桁が年齢を示すということです。それは、引き算で下の桁の数が足りなくなると、上の桁から「借りてくる」という「ロジック」にもとづきます。

2進数で考える

この「ロジック」は何も10進数にかぎったことではありません。2進数でも構わないでしょう。そして都合のよいことに、JavaScriptには2進数についてビット演算という桁ごとの処理が備わっているのです。今回使うのは、2進数の桁をずらすシフト演算子です。

1を4桁左シフト<<すると16、5桁なら32です。つまり、12月までなら2進数4桁で足り、31日までは5桁でちょうど表せます。

1 << 4  // 16
1 << 5  // 32

すると、年月日はつぎのように表せばよいでしょう。|ビットごとのORで、今回は足し算と同じ結果になります。

const day = year << 9 | month << 5 | date;

満年齢を求める

満年齢を求めるJavaScriptコードはつぎのようになります。頭4桁の年を得るには、9(= 4 + 5)桁右シフト>>するだけです。jsdo.itにサンプルコードを掲げました。

const yourBirthDay = {
  year: ,
  month: ,
  date: 
};
const birthday =
    yourBirthDay.year << 9
    | yourBirthDay.month << 5 
    | yourBirthDay.date;
const now = new Date();
const today =
    now.getFullYear() << 9
    | (now.getMonth() + 1) << 5
    | now.getDate();
const age = (today - birthday) >> 9;
console.log(age);
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.