PHPのstrtotimeで2099年(2038年1月19日以降)の値が取得できない。

  • 投稿
  • 編集

PHPで現在の日付が期限を過ぎていなければ表示しないさいといった判別をするため、わかりやすく2099年12月31日を期限としてみたところ、計算できませんでした。strtotime(date("2099/12/31"))では値を取得できないようです。

<?php
if (strtotime(date("Y/m/d")) <= strtotime(date("2099/12/31"))){
	echo "期限内です。\n";
}else{
	echo "期限を過ぎています。\n";
}
?>

値が取得できていないので期限内なのに"期限を過ぎています。"と表示されました。では、いつまでなら大丈夫なのかといろいろやってみたところ2038/01/19までなら値が判別できました。

<?php
if (strtotime(date("Y/m/d")) <= strtotime(date("2038/01/19"))){
	echo "期限内です。\n";
}else{
	echo "期限を過ぎています。\n";
}
?>

なぜこんなことになっているのか検索してみたところ以下のページが参考になりました。

これによると32ビット環境のPHPで使える有効なタイムスタンプは1901年12月13日 20:45:54から2038年01月19日 03:14:07までだそうです。

今回の判別は時間は関係なく日付だけで行うので、以下のようにstrtotimeで日付を数値にせず日付のまま判別するようにしました。これは2099年でも大丈夫なようです。

<?php
if (date("Y/m/d") <= date("2099/12/31")){
	echo "期限内です。\n";
}else{
	echo "期限を過ぎています。\n";
}
?>