肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

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

ふう

なんのために使うのだろう?w
つかvim慣れねえ...><*1

追記

  • strftimeを365回呼び出すから遅いですね.こまりましたね.C言語で書くか.

*1:特訓中です