4

如何通过给出月份、年份、星期几和星期数来计算 PHP 中的星期几。
就像,如果我有 2013 年 9 月,星期几是星期五,星期数是 2,我应该得到 6。(2013 年 9 月 6 日是第 2 周的星期五。)

4

3 回答 3

4

实现此目的的一种方法使用strtotime().

不幸的是,它并不像以下那样简单:

strtotime('Friday of second week of September 2013');

为了使几周如您所说的那样工作,您需要strtotime()使用相对时间戳再次调用。

$first_of_month_timestamp = strtotime('first day of September 2013');
$second_week_friday = strtotime('+1 week, Friday', $first_of_month_timestamp);
echo date('Y-m-d', $second_week_friday); // 2013-09-13

注意:由于该月的第一天从第一周开始,因此我相应地减少了这一周。

于 2013-09-10T14:47:20.217 回答
3

我打算建议以strtotime()这种方式使用:

$ts = strtotime('2nd friday of september 2013');
echo date('Y-m-d', $ts), PHP_EOL;
// outputs: 2013-09-13

看来这不是您希望日历的行为方式?但它遵循(适当的)标准:)

于 2013-09-10T14:43:46.110 回答
0

这样它有点更长和明显,但它的工作原理。

/* INPUT */
$month = "September";
$year = "2013";
$dayWeek= "Friday";
$week = 2;

$start = strtotime("{$year}/{$month}/1"); //get first day of that month
$result = false;
while(true) { //loop all days of month to find expected day
    if(date("w", $start) == $week && date("l", $start) == $dayWeek) {
        $result = date("d", $start);
        break;
    }
    $start += 60 * 60 * 24;
}

var_dump($result); // string(2) "06"
于 2013-09-10T14:55:57.467 回答