次のコード。
strtotime("first saturday", strtotime("+2 month"));
正しく機能していますが、 April +2 month、 October + 8 month、および Decemberの月+ 10 monthでは、その月の最初の土曜日ではなく 2 番目の土曜日を与えています。
何が原因で、どのように停止するかについてのアイデア。
素晴らしい
$saturday = strtotime("first saturday", strtotime("+2 month", strtotime(date("01-m-Y"))));
これは、「最初の土曜日」が与えられた日付から計算されるためです。指定された日付がすでに土曜日の場合は、次の日付が計算されます。
特定の月の最初の土曜日が必要な場合は、次のようにします。
$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);
}
月の最初の日を使用して元のタイムスタンプを作成し、月/年を確認します。
function firstSaturday($month, $year) {
if (!is_numeric($month) && !is_numeric($year)) {
return -1;
}
return strtotime('first saturday', mktime(0, 0, 0, $month, 1, $year));
}