0

誰かが現在の週が発生した場合に取得する方法を理解するのを手伝ってもらえますか.

次の変数があります: start_date 、 end_date 、 current_date week_occurrence 。

そして、私は出現回数を返す関数を持っています

// will return the number of weeks between start - end
function get_weeks_count($start , $end) {
       return floor(abs(strtotime($start) - strtotime($end)) / 604800);    
    }

現在の日付が有効な日付かどうかを知る必要があります。

私は発生=毎N週のエントリを持っています。N が有効であることを知る方法。

抽象度が低い: 12 月に発生し、3 週間ごとに発生する場合、start_date は 1 日で end_date は 12 月 30 日です)

返されます:

 TRUE  for 1st week

 FALSE for the second week

 FALSE for the third week

 TRUE  for the last week
4

2 に答える 2

0

私がこの問題に取り組む方法は次のとおりです。これは、$n 週間ごとに発生する場合に適用されます。

$n = $week_occurrence;
$occurrence = false;

// To begin, get the number of weeks between the start and current dates.
$weeks = get_weeks_count($start_date , $current_date); // Using the function you already have

// Now check if $weeks == 0
if ($weeks == 0) {
    $occurrence = true;

// If not, check if $weeks is divisible by $n without any remainder
} else if ($weeks % $n == 0) {
    $occurrence = true;
}

が依然として false の場合$occurrence、現在の週は正しいオカレンスに含まれていません。true の場合、その週はスコープ内にあります。

ここで実際に行っていることは、開始日からの現在の週数が 0 に等しい (まだ最初の週にある) か、発生回数で割り切れるか、余りがないことを確認することだけです。

これが役立つことを願っています。

PS私はあなたが尋ねた特定の質問に答えただけです. ただし、この前提がスケジューリングなどにどのように使用できるかについて詳しく知りたい場合は、お気軽にお問い合わせください。それに応じて回答を拡大します。

于 2012-12-07T15:47:36.640 に答える
0

DateTimeDateIntervalの組み合わせは、これを簡単に実現するのに役立ちます。

function get_occurences(DateTime $start, DateTime $end, DateInterval $period) {
    $weeks = array();
    $cursor = clone $start;
    $rate = DateInterval::createFromDateString('1 week');
    do {
        /* We can check to see if it's within the occurrence period */
        if ($cursor == $start) {
            $isOccurrence = true;
            $start->add($period); // Move the start period up
        } else {
            $isOccurrence = false;
        }
        $weeks[$cursor->format('Y-m-d')] = $isOccurrence;
    } while($cursor->add($rate) < $end);
    return $weeks;
}

$period = DateInterval::createFromDateString('3 week');
$start = new DateTime('2012-12-01');
$end = new DateTime('2012-12-30');
/* From this array you can get both the number of occurrences as well as their respective dates*/
var_dump(get_occurences($start, $end, $period));

/** Output:

    array(5) {
      ["2012-12-01"]=>
      bool(true)
      ["2012-12-08"]=>
      bool(false)
      ["2012-12-15"]=>
      bool(false)
      ["2012-12-22"]=>
      bool(true)
      ["2012-12-29"]=>
      bool(false)
    }

*/
于 2012-12-07T15:52:59.607 に答える