0

週が金曜日に始まる月の日付がどの週にあるかを探しています。たとえば、カレンダーは次のようになります。

Week count   F   Sa  Su  M   Tu  W   Th
----------------------------------------
       0         1   2   3   4   5   6
       1     7   8   9   10  11  12  13
       2     14  15  16  17  18  19  20
       3     ...

入力はタイムスタンプ形式 ( $currentDate) の日付で、形式の出力を探しています$weekCount

ありがとう

4

1 に答える 1

1

すべてをカバーしていることがわかるまで、一度に7日間戻って、前の金曜日の数を数える必要があります。

ループは常に最初の金曜日を超えて、月の最初の日ではない金曜日の通常のケースをカバーします。金曜日が月の最初の日である場合は、オーバーシュートを考慮して増分を減らす必要があります。

    $currentDate = time(); // e.g.

    $dayOfMonth = date('j', $currentDate);

    $ym = date('Y-m', $currentDate);

    $firstFriday = strtotime("Friday ".$ym);

    $dateOfFirstFriday = date('j', $firstFriday);

    // we need to reduce count by 1 if friday is the 1st, to compensate
    // for overshooting by a week due to the >= in the while loop
    $weekCount = ($dateOfFirstFriday == 1) ? -1 : 0;

    while ($dayOfMonth >= $dateOfFirstFriday) {
        $weekCount ++;
        $dayOfMonth = $dayOfMonth - 7;
    }

    var_dump($weekCount);

このコードは、たとえば金曜日の30日であるかどうかを考慮していませんが、実際には翌月の第0週にいますか?それが必要な場合は、ポストを開くことからは明確ではありません。

于 2012-09-27T12:44:20.077 に答える