LoginSignup
2
0

More than 5 years have passed since last update.

日時の計算にはライブラリ(strtotime)を使おう

Last updated at Posted at 2018-03-12

事始め

こういう計算式を見たことがないですか?

define('YEAR_SECONDS', 365 * 24* 60 * 60);

// 次の年を取得
$next_year = date('Y', time() + YEAR_SECONDS);

これを見て普通じゃね?って思った人はちょっと待って下さい
残念ながらこのコードは間違いです

簡単に反証出来るのでやってみましょう

反証

define('YEAR_SECONDS', 365 * 24* 60 * 60);

$lib_calc_seconds = strtotime('+48 years', 0);
$self_calc_seconds = 48 * YEAE_SECONDS;

echo($lib_calc_seconds - YEAR_SECONDS); // 1036800

差分が出ていますね。理由は簡単です
うるう年を考慮していないからです

万年カレンダーを作ったことがある人はすぐに分かったかもしれないですね

ではコードを修正してみましょう

修正

$next_year = date('Y', strtotime('+1 years'));

これだけです。むしろ簡単になりましたね
これなら何百年先でも差分は出ません
PHP万歳!

まとめ

今回の趣旨は面倒なことはライブラリに頼ろうということです
きっと自分で書くより正確で簡単です

2
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0