読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

mktimeの引数にnullとか0とか文字列を入れてみた

php

mktimeの引数にnullとか0とか文字列が入っていたら、
どういう挙動になるのだろうか。試してみた。

<?php

$date = date("Y-m-d", mktime(0, 0, 0, NULL, NULL, 2012));
echo "1. " . $date . "\n";

$date = date("Y-m-d", mktime(0, 0, 0, NULL, 1, NULL));
echo "2. " . $date . "\n";

$date = date("Y-m-d", mktime(0, 0, 0, 1, NULL, NULL));
echo "3. " . $date . "\n";

$date = date("Y-m-d", mktime(0, 0, 0, NULL, NULL, NULL));
echo "4. " . $date . "\n";

$date = date("Y-m-d", mktime(0, 0, 0, 0, 0, 0));
echo "5. " . $date . "\n";

$date = date("Y-m-d", mktime(NULL, NULL, NULL, NULL, NULL, NULL));
echo "6. " . $date . "\n";

$date = date("Y-m-d", mktime());
echo "7. " . $date . "\n";

$date = date("Y-m-d", mktime(0, 0, 0, 1, 'hoge', 2012));
echo "8. " . $date . "\n";

結果

1. 2011-11-30
2. 1999-12-01
3. 1999-12-31
4. 1999-11-30
5. 1999-11-30
6. 1999-11-30
7. 2012-03-09
PHP Warning: mktime() expects parameter 5 to be long, string given in /Users/shigemk2/qr_87535CB.php on line 24
PHP Stack trace:
PHP 1. {main}() /Users/shigemk2/qr_87535CB.php:0
PHP 2. mktime() /Users/shigemk2/qr_87535CB.php:24
8. 1970-01-01

デフォルトでは1970-01-01からスタートしているので、
どういう理由でこういう挙動になるのかイマイチよく分からないのだが、
要するに予期せぬ結果が出るってことだから、
何かしらの救済処置をやらないといけないってことか。