yyyy-mm-dd(string)の形でもらった生年月日から歳を計算してあげよう
はじめに
今回はgolangでyyyy-mm-ddの形で渡されたjsonから年齢を出したいと思います。
逆引きGolang (日付と時刻)
上のリンク先のページにに書かれている方法を使えば簡単に求めることができるかと思いますが
あえてここでは力技(めんどくさい方法)でやっていきたいと思います。
まずはjson.UnmarshalでJSON文字列をデコードした後に
生年月日(Birthday)と現在時刻(timeNow)を"-"で分割します。
現在時刻はRFC3339形式で2020-08-21 18:34:20.136181 +0900 JST m=+0.000099091
こういった形で取得するので現在時刻のddを得るために" "で分割します。
BirthdaySlice := strings.Split(users.Birthday, "-") timeNow := time.Now() s := "" s = timeNow.String() nowTimeSlice := strings.Split(s, "-") for _ = range BirthdaySlice { } for _ = range nowTimeSlice { } nowTimeS := strings.Split(nowTimeSlice[2], " ") for _ = range nowTimeSlice { }
次は分割した文字列を数値に変換します。
var ns int ns, _ = strconv.Atoi(nowTimeS[0]) var b [3]int var n [3]int for i := 0; i < 3; i++ { b[i], _ = strconv.Atoi(BirthdaySlice[i]) n[i], _ = strconv.Atoi(nowTimeSlice[i]) }
最後に生年月日と現在時刻を比較して歳を出します。
var old int if n[1]-b[1] < 0 { old = n[0] - b[0] - 1 } else if (n[1]-b[1] == 0) && (b[2]-ns < 0) { old = n[0] - b[0] - 1 }
(今日の日付 - 誕生日) / 10000 = 年齢や2つの時刻差を求める方法などを使ってもっと簡単に年齢を求めることができると思うので頑張ってみてください。