2024-03-01

月末日の取得方法

ライブラリにある標準的実装使用する

言語によっては標準的に月末日を取得できる関数が用意されている

それを使うのが一番簡単バグが出ないが

用意されてない場合もそこそこあるし

サードパーティー的なライブラリだとライセンスなどメンテナンス含めて面倒になるので避けることも多い

月末日にせずに28日にする

そもそも仕様を「月末日」などという不確定なものにせずに28日にしてもらう

どの月にも28日はあるので問題無い

ちゃん仕様を決める部門連携が取れていれば多くの場合28日にしてくれるし

28日支払い」が多いのもこのためだと思ってる

翌月マイナス1日で計算する

割とよくある実装がこの「次の月初めから1日(1秒)引く」という実装

2024年2月の月末日を取得する場合2024年3月1日UNIX時間から24*60*60秒を引いて計算する

ただし、実装を間違えると12月31日ときに失敗するので注意が必要

自分実装する

各月の月末日をマップとして保持しておいて取得させる

関数実装するなら if(month==1) return 31 とかを12行書けば実装できる

この場合閏年考慮していないと4年に一度バグが発生する

閏年の判定はライブラリ標準的実装されていることが多いが

自分実装する場合プログラミング教科書にあるぐらい有名なのでコピペでもChatGPTでも使えば良い

ただ仕様をそのまま実装せずに「4で割り切れたら閏年」でも問題無い(やったことはないが)

「それだと2100年でバグる!」

などと騒ぐやつがUNIX時間を使ってるのはなかなか興味深い

ちなみに過去の日付であっても2000年バグらない(そのための400年処理だし)ため

1900年を入れない限りは問題無い

最高齢の人でも1900年からなので基本的には問題無いだろう

たまにプルダウンで1901年からしか入れられないシステムを見るが、「もしかして閏年のせい?」と思ってる

  • PayPay資産運用のクレカ積立日が28日固定やから雑魚プログラマーしかいないんやろなぁと思ってるやで。

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん