[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 メーリングリストの案内