2009-07-02 25 views
3

私は$fromdate$todateの変数を持っています。 PHPで$fromdate$todateの間に存在する各日曜日の日付を計算できる関数が必要です。毎週日曜日に2つの日付の間を探します

+2

これは宿題かもしれないという点では些細なことです。しかし、確かに。 – Welbog

+0

ええと...私が正しく覚えていれば、これはProject Eulerの質問だと思う。 – Beska

答えて

11

これらは日付オブジェクトであると仮定し、$ fromdateから開始し、その日を日曜日に追加し、$ todateより前である限り、その日を追加します。見つけた各日曜日に7日を追加し、その日付を追加し、新しい日付が$ todateの前である限り継続します。この方法で見つかった各日付を記録しておきます。

8

この機能を使用:

function getDateForSpecificDayBetweenDates($startDate, $endDate, $weekdayNumber) 
{ 
    $startDate = strtotime($startDate); 
    $endDate = strtotime($endDate); 

    $dateArr = array(); 

    do 
    { 
     if(date("w", $startDate) != $weekdayNumber) 
     { 
      $startDate += (24 * 3600); // add 1 day 
     } 
    } while(date("w", $startDate) != $weekdayNumber); 


    while($startDate <= $endDate) 
    { 
     $dateArr[] = date('Y-m-d', $startDate); 
     $startDate += (7 * 24 * 3600); // add 7 days 
    } 

    return($dateArr); 
} 

関数呼び出し2010年にすべての日曜日のための日付を取得する:

$dateArr = getDateForSpecificDayBetweenDates('2010-01-01', '2010-12-31', 0); 

print "<pre>"; 
print_r($dateArr); 

reuslt:

Array 
(
    [0] => 2010-01-03 
    [1] => 2010-01-10 
    [2] => 2010-01-17 
    [3] => 2010-01-24 
    [4] => 2010-01-31 
    [5] => 2010-02-07 

    ................ 
    ................ 
    ................ 

    [47] => 2010-11-28 
    [48] => 2010-12-05 
    [49] => 2010-12-12 
    [50] => 2010-12-19 
    [51] => 2010-12-26 
) 
+0

あなたの答えに感謝します。 :) – apis17

+2

$ startDate + =(7 * 24 * 3600); // 7日を追加する は次のようになります。 $ startDate = strtotime( "+ 1 week"、$ startDate); // 7日追加 – Bokw

+0

@Bokwは正しいです。そうでなければ、最後の日が間違っています。 – Arda

3

この

をお試しください
function getDateForSpecificDayBetweenDates($start, $end, $weekday = 0){ 

$weekdays="Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday"; 

$arr_weekdays=split(",", $weekdays); 
$weekday = $arr_weekdays[$weekday]; 
if(!$weekday) 
    die("Invalid Weekday!"); 

$start= strtotime("+0 day", strtotime($start)); 
$end= strtotime($end); 

$dateArr = array(); 
$friday = strtotime($weekday, $start); 
while($friday <= $end) 
{ 
    $dateArr[] = date("Y-m-d", $friday); 
    $friday = strtotime("+1 weeks", $friday); 
} 
$dateArr[] = date("Y-m-d", $friday); 

return $dateArr; 
} 

はここ

$dateArr = getDateForSpecificDayBetweenDates("Today", "+1 year", 0); // 0 Sun, 1 Mon, etc. 

$start

$end日付が strtotime()サポートは何もかかります...この機能を呼び出すことができる方法です。

関連する問題