一年の中で、土日のみ抽出して表示したい時などは DateInterval を一日間隔にセットし、曜日をチェックすれば簡単です。
閏年を考慮した日数分ループさせるか、年が変わったらループを抜けるように設計するのがいいと思います。
こちらのサンプルでは配列として日曜(0)と土曜(6)を指定し、該当する日にちを表示します。
<?php $year = 2038; $target = array(0, 6); // 日曜と土曜 $datetime = new DateTime(); $datetime->setTimezone( new DateTimeZone('Asia/Tokyo') ); $datetime->setDate($year, 1, 1); // 間隔 $interval = new DateInterval('P1D'); // 閏年をチェック $days = $datetime->format('L') == '1' ? 366 : 365; $result = array(); for($i=0;$i<$days;$i++){ if( in_array( (int)$datetime->format('w'), $target) ){ $result[] = clone $datetime; } $datetime->add($interval); } foreach($result as $value){ echo $value->format("Y-m-d l") . "\n"; }
実行結果
2038-01-02 Saturday 2038-01-03 Sunday 2038-01-09 Saturday 2038-01-10 Sunday 2038-01-16 Saturday 2038-01-17 Sunday 2038-01-23 Saturday 2038-01-24 Sunday 2038-01-30 Saturday 2038-01-31 Sunday 2038-02-06 Saturday 2038-02-07 Sunday 2038-02-13 Saturday 2038-02-14 Sunday (以下略)