4

次のコード。

strtotime("first saturday", strtotime("+2 month"));

正しく機能していますが、 April +2 month、 October + 8 month、および Decemberの月+ 10 monthでは、その月の最初の土曜日ではなく 2 番目の土曜日を与えています。

何が原因で、どのように停止するかについてのアイデア。

素晴らしい

4

3 に答える 3

5
$saturday = strtotime("first saturday", strtotime("+2 month", strtotime(date("01-m-Y"))));
于 2011-02-02T15:43:53.103 に答える
1

これは、「最初の土曜日」が与えられた日付から計算されるためです。指定された日付がすでに土曜日の場合は、次の日付が計算されます。

特定の月の最初の土曜日が必要な場合は、次のようにします。

$stamp = time();
$tm = localtime($stamp, TRUE);

// +1 to account for the offset, +2 for "+2 month"
$begin = mktime(0, 0, 0, $tm['tm_mon'] + 1 + 2, 1, 1900 + $tm['tm_year']);

if (6 == $begin['tm_wday']) {
//  we already got the saturday
    $first_saturday = $stamp;
} else {
    $first_saturday = strtotime('first saturday', $begin);
}
于 2011-02-02T15:36:38.057 に答える
0

月の最初の日を使用して元のタイムスタンプを作成し、月/年を確認します。

function firstSaturday($month, $year) {
    if (!is_numeric($month) && !is_numeric($year)) {
        return -1;
    }

    return strtotime('first saturday', mktime(0, 0, 0, $month, 1, $year));
}
于 2011-02-02T15:45:20.220 に答える