PHP strtotime дает неправильную дату для определенных месяцев - PullRequest
4 голосов
/ 02 февраля 2011

следующий код.

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

работает корректно, но с апрелем +2 month, октябрем + 8 month и декабрем + 10 month дает вторую субботу в этом месяце, а не первую.

Любые идеи, что его вызывает и как его остановить.

Чудесный

Ответы [ 3 ]

5 голосов
/ 02 февраля 2011
$saturday = strtotime("first saturday", strtotime("+2 month", strtotime(date("01-m-Y"))));
1 голос
/ 02 февраля 2011

Это потому, что «первая суббота» рассчитывается из указанной даты. Если данная дата уже является субботой, рассчитывается следующая.

Если вам нужна первая суббота определенного месяца, выполните:

$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);
}
0 голосов
/ 02 февраля 2011

Используйте первый день месяца, чтобы создать свою временную метку, а затем просто проверьте месяц / год:

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

    return strtotime('first saturday', mktime(0, 0, 0, $month, 1, $year));
}
...