PHP strtotime在某些月份给出了错误的日期

时间:2011-02-02 15:29:54

标签: php strtotime

以下代码。

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

工作正常,但是4月份+2 month,10月+ 8 month和12月+ 10 month正在给出该月的第二个星期六而不是第一个星期六。

任何想法是什么导致它以及如何阻止它。

非凡

3 个答案:

答案 0 :(得分:5)

$saturday = strtotime("first saturday", strtotime("+2 month", strtotime(date("01-m-Y"))));

答案 1 :(得分: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);
}

答案 2 :(得分: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));
}