[PHP-users 17719]Re: 指定曜日の日付を取得する関数
Osamu Shigematsu
m5issige @ mr.hitachi-medical.co.jp
2003年 9月 8日 (月) 12:17:46 JST
重松です。こんにちは。
> 3. 出現回数が52回か53回については、チェックする方法はいろい
> ろとあると思いますが、僕はmktime関数でループさせて渡した
> 日付が指定年かどうかでチェックさせるようにします。
> if($year==(int)date("Y",mktime(0,0,0,$mon,$day,$year)))
> と言った感じでやるということです。
このロジック、手間がかからなくていいですね。
あまり速度は考慮していませんが、実装してみました。
# とりあえず、今年は正しい答えを返しているようです。
しかし、よく考えたら、本当に、配列を差分 (増減) を伴って、高速に埋める方
法がほしいですね。
どなたかすばらしい妙技はありませんでしょうか?
<?php
$secs = 60 * 60 * 24;
function test($year, $wday)
{
global $secs;
$time = mktime(0,0,0,1,1,$year - 1900);
$info = getdate($time);
$time += (($wday - $info['wday'] + 7) % 7) * $secs;
$result = array();
$diff = 7 * $secs;
for ($i = 0; $i < 52; ++$i) {
$result[] = $time;
$time += $diff;
}
if ($time < mktime(0,0,0,1,1,$year + 1 - 1900)) {
$result[] = $time;
}
return $result;
}
function timestamp2text($time)
{
return date('Y-m-d', $time);
}
$fridays = test(2003, 5);
var_dump(array_map('timestamp2text', $fridays));
?>
--
Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp>
PHP-users メーリングリストの案内