下記の記事を参考にしながらdayjsを使用して生年月日を算出していきます。
Moment.jsを使って年齢計算
環境
nuxt.jsのcompositionAPIを使用
@nuxtjs/dayjsのモジュールをインストール済み
実際のコード
function calcAge(birthday) {
const today = $dayjs()
const birthDate = $dayjs(birthday)
const baseAge = today.year() - birthDate.year()
const thisBirthday = $dayjs(`${today.year()}-${birthDate.month() + 1}-${birthDate.date()}`)
return today.isBefore(thisBirthday) ? baseAge - 1 : baseAge
}
少しコメントを加えると
// 筆者の誕生日 birthday = 1998-06-03 とする
function calcAge(birthday) {
// 今日の日付を取得
const today = $dayjs()
// => d {$L: "ja", $d: Thu Mar 18 2021 09:13:01 GMT+0900 (日本標準時), $x: {…}, $y: 2021, $M: 2, …}
// birthdayをパースする
const birthDate = $dayjs(birthday)
// => d {$L: "ja", $d: Wed Jun 03 1998 00:00:00 GMT+0900 (日本標準時), $x: {…}, $y: 1998, $M: 5, …}
// 単純に現在の年から生年月日を引く
const baseAge = today.year() - birthDate.year()
// => 23
// 今年の誕生日を取得
const thisBirthday = $dayjs(`${today.year()}-${birthDate.month() + 1}-${birthDate.date()}`)
// => {$L: "ja", $d: Thu Jun 03 2021 00:00:00 GMT+0900 (日本標準時), $x: {…}, $y: 2021, $M: 5, …}
// 今年の誕生日が今日より前であればまだ誕生日は来ていないという事なので1引く
const age = today.isBefore(thisBirthday) ? baseAge - 1 : baseAge
// => 22
return age
}
いくつか実際にやってみる
calcAge('1994-5-25')
=> 26
calcAge('19920820')
=> 28
calcAge('1998-08-10')
=> 22
問題なさそうですね。
以上です。参考になればLGTMいただけると幸いです。
追記
コメントで指摘いただいたのですが、単純にyearの差分だけで出せるみたいです。
const birthday = $dayjs('1998-06-03')
const today = $dayjs('2021-04-22')
console.log(today.diff(birthday, 'year'))
=> 22
なのでリファクタリングすると下記のようになります。
function calcAge(birthday) {
const today = $dayjs()
const age today.diff(birthday, 'year')
return age
}