PHPのmktime関数に存在していない日付をしてした場合、一体どんなことになるのか?
その謎にせまるべく、われわれ取材班は実験を決行した。
実験に使われた日付は以下の通りである。
2013年2月30日
そう、そんな日付は存在しない。
2013年の2月は28日までである。
その次の日は3月1日になるのだ。
にもかかわらず、2013年2月30日という日付を以下の通りに指定してみる。
そしてmktime関数を実行してみるという試みである。
$year = 2013;
$month = 2;
$day = 30;
$hour = 12;
$minute = 0;
$second = 0;
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
echo $timestamp;
これをすることで一体何が起こるだろうか。
存在しない日付を指定するという暴挙に出たのである。
それも確信犯である。
存在していないことを知っていながら、その日付を指定したのである。
それが一体どのような結果をもたらすのだろう。
これが今回の実験の趣旨である。
PHPがぶっ壊れるだろうか?
あるいはfalseが返ってくるだろうか?
あるいは警察につかまって死刑になるだろうか。
どれもまったく違う。
実際は以下の結果が表示された。
1362193200
なんと!すいちょうけん!
普通のタイムスタンプの値のように見受けれられる。
これは一体どういうことだろう?
罠だろうか?
私はこの、以下にもタイムスタンプのように見える数値を以下のようにして、日付に変換してみるという荒業を決行した。
$timestamp = "1362193200";
echo date('Y-m-d H:i:s', $timestamp);
こ、こ、これは!
信じられない結果がコンピューターからはじき出された。
2013-03-02 12:00:00
これはつまり、2月28日の二日後の日付ではないか。
つまり2月30日という存在しない幻の日付は、正しく変化されたのである。
正しく?
それが本当に正しいことなのか?
私はアゴをガクガクと振るわせて、熱に浮かされているような状態になりながら、以下の実験を継続して決行した。
$year = 2013;
$month = 13;
$day = 30;
$hour = 12;
$minute = 0;
$second = 0;
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
echo $timestamp;
なんと前人未踏の以下の日付である。
2013年13月30日12時0分0秒
13月!
これはさすがに警察に捕まるのではないだろうか。
そして死刑になるのではないか。
あるいはPHPの使用禁止令が出るだろうか?
しかし私は真実を明らかにするために、すべてのルールを踏み越えて、その荒行を決行する。
不気味に以下の数値がコンピューターから出力される。
1391050800
これは一体何を意味するのか?
その数値を日付に変換するプログラムを実行させてみる。
なんとコンピューターは以下の結果をはじき出した。
2014-01-30 12:00:00
驚くではないか!
13月は1月に変更され、そして、年が一年増えているではないか!
どうやらそう、PHPが気を利かせて配慮してくれたようである。
「やれやれバカな数値を入力しやがって。人間のぼけなすめ。だがまあ許してやろう。
正しい数値に変換して、そして結果を返してやろうではないか。
さながらそう、バカな子供の失敗の尻拭いを優しくしてあげる母親のように」
というようなことを考えて、どうやらPHPは配慮してくれているようだ。
うん、分かった。理解した!
新橋でリンパマッサージ
PR