1/1〜12/31を出力する
via. うえちょこ@ぼろぐ» [php]1/1?12/31を出力するには?
というわけで,やってみる.
<?php $date = mktime(0, 0, 0, 1, 1, intval($argv[1])); for($i = 0; $i < 365; $i++) { echo strftime("%m/%d ", $date + $i*86400) . PHP_EOL; }
ちなみに実行時間は,
% time php date_dump.php 2007 >/dev/null real 0m0.118s user 0m0.017s sys 0m0.100s
まぁ10回くらいやってみましたが,平均的に0.110秒くらい?(ちなみに時計の激しく狂うVM上での実行なので誤差はありますネ)
うるう年を考慮
そういや今年は366日あるじゃないか!
ということで.
<?php $date = mktime(0, 0, 0, 1, 1, intval($argv[1])); for($i = 0; date("Y", $date + $i*86400) == $argv[1]; $i++) { echo strftime("%m/%d ", $date + $i*86400) . PHP_EOL; }
実行結果です.ちゃんとうるう年できたよー!
% php date_dump.php 2007 01/01 ...(中略) 02/27 02/28 03/01 ...(後略) % php date_dump.php 2008 01/01 ...(中略) 02/28 02/29 03/01 ...(後略)
さすがに実行速度は落ちるなあ.
% time php date_dump.php 2008 > /dev/null real 0m0.179s user 0m0.029s sys 0m0.149s
平均的に0.170〜0.180秒くらい?
もし$argv[1]が年じゃなかったら?
何も出ません.for文trueにならないからね!
ちなみに,2038を指定すると,
% php date_dump.php 2038 01/01 01/02 01/03 01/04 01/05 01/06 01/07 01/08 01/09 01/10 01/11 01/12 01/13 01/14 01/15 01/16 01/17 01/18 01/19
本当にあり(r
追記
- strftimeを365回呼び出すから遅いですね.こまりましたね.C言語で書くか.
*1:特訓中です