2017-11-30 11 views
0

私はX日ごとにいくつかのイベントを作成できるWebサイトで作業しています(Xはその週の曜日の名前です)。その後、彼は将来作成したいイベントの数を入力する必要があります。数週間にわたってループして、数日間の正確な日付を見つけるにはどうすればいいですか?

たとえば、ユーザーは毎週月曜日と火曜日を選択し、150個のイベントを作成することを決定します。ここで

は私が今まで作ってきたコードは次のとおりです。

// Init the date counter    
$cpt_date_found = 0; 

// Number of date to find 
$rec_occ = 150; 

// Init an ending date far in the future   
$endDate = strtotime('+10 years', time()); 

// Loop over the weeks 
for($i = strtotime('Monday', strtotime(date("d.m.Y"))); $i <= $endDate; $i = strtotime('+1 week', $i)) { 

    // -- Monday date found, create the event in the database 

    $cpt_date_found++; 

    // Break the loop if we have enough dates found 
    if($cpt_date_found == $rec_occ) { 
     break; 
    } 

} 

このコードは、将来的には毎週月曜日の日付を見つけて、我々は、ユーザが指定した出現回数に達したらループを中断します。

私は、ユーザが指定したオカレンスカウントの終了前にループを解除できるように、将来、終了日を入力しました。

最初に私のコードの「品質」についてはわかりません...ループを壊すことは最良のアイデアではないと思います。

その後、ユーザーが数日(月曜日、火曜日、金曜日)を指定した場合、ループ回数を繰り返す代わりに、指定した日ごとに1回ループする方法がありますか?

ありがとうございます!

+1

https://stackoverflow.com/a/33329004/8165478この回答は、必要なものを行う必要があります。 – Vindur

答えて

0

次のコードは、5年間にわたってループします。その5年間の各週について、その週の各日を含むDatePeriodが生成されます。あなたが探している日数で、それぞれの日をプリセット配列と比較します。その後、コードを一定時間カウントダウンするイベントを生成することができます。カウンタがゼロに達すると、完了です。

$searchDates = array('Mon', 'Tue', 'Fri'); 
$amountOfTimes = 27; 

$startDate = new DateTime(); 
$endDate = new DateTime('next monday'); 
$endDate->modify('+5 years'); 

$interval = new DateInterval('P1W'); 
$dateRange = new DatePeriod($startDate, $interval ,$endDate); 

// Loop through the weeks 
foreach ($dateRange as $weekStart) { 
    $weekEnd = clone $weekStart; 
    $weekEnd->modify('+6 days'); 

    $subInterval = new DateInterval('P1D'); 

    // Generate a DatePeriod for the current week 
    $subRange = new DatePeriod($weekStart, $subInterval ,$weekEnd); 
    foreach ($subRange as $weekday) { 
     if (in_array($weekday, array('Mon', 'Fri', 'Sun'))) { 
      // Create event 

      // Countdown 
      $amountOfTimes--; 
     } 

     if ($amountOfTimes == 0) { 
      break; 
     } 
    } 
} 
関連する問題