うるう年って、100年に一回ないの知らなかった
私恥ずかしながらちょっと前まで知らなかったんです。だって2000年2月29日ありましたし…。
恥ずかしいワタクシ
なぜ気づきましたかと言うと、Excelで日数計算してたとき、あれなんか合わないなっていうのがあって。よく見たら2100年2月29日って存在してなかったんですよね。。
エーなんでじゃあ2000年は、というと、うるう年の定義は、
なんだそうで2000年はうるうdayがあったということですね。生きているうちに出会えるとは、なかなかのレアです!
私、kintone hive登壇した時に、標準機能でもうるう年を無視しない年齢計算できるんだぞっ!って話したので、式をnoteで紹介しようと思っていたんです。それで本当に紹介して大丈夫なのか検証していたら、どうにも1日遅く年を取ってしまう組み合わせがありました。あれこれ試しても解決せず、もはや業務改善関係ないので諦めました。いやまじであの場で公開しなくてよかったww
標準機能で年齢計算するには、すてきな松田さん方式を使うのがよいかと思います。
この”制約あり”ってのも現在の仕様では解消しています!
それでその年齢計算式とは、、
年数の算出において、日付の差を365日で割るんじゃなくて、365日*4年+1日=1461で割って、そのあと4掛ければいいんじゃないかと考えました。
ROUNDDOWN((基準日-生年月日)/((364*4+1)*24*60*60)*4,0)
ほぼほぼうまくいくんです。ただ、基準日と生年月日の月日が同じとき、1日遅く年をとってしまう年の組み合わせがありました。
で、うるう年のサイクルに、100年に1日足さないターンがあるってことは、 (365*4+1) が間違ってるんじゃないのか?と思って、4年の正確な秒数で割ってみたり。
1日遅く年をとってしまうパターンが、3パターンくらいあるっぽいと予測して、それに対する式をつけ足したりしましたが、それだとこんどは別に1日早く年を取る組み合わせがでてきてしまったり‥
他にも散々式を足したりしてみたんですけど、1個のフィールドでは解決できず。
…ということで、まぁ微妙な感じで終わったんですが、ただ単純に日数差を365日で割って年数を出すよりはだいぶマシかなとは思います。
なんでこんなことを一生懸命考えているのか
私、イシイケンタロウさんの曜日計算式をありとあらゆるアプリで愛用しているんですけど、本当にリスペクトしているんです。シンプルな労力で解決するのって爽快感あるし、無限の可能性って感じで、ロマンを感じます!
おわり
ところで12ってなんか不思議な数字だなと思います。音階(ピアノなど、平均律)って12音で一周(1オクターブ)。息子の楽譜についてた調の一覧表が時計みたいで。
もしかして音程のアルゴリズムって日時のそれと関係あったりして‥?!なんて思うとロマンチックですよね!
この記事が気に入ったらサポートをしてみませんか?