3

抱歉,如果这是重复的。为什么下面的代码会这样错误?它目前返回 12 月 6 日,即 12 月的第一个星期五(2013 年 10 月 8 日询问)

$thisMonth = date('m');
$year = date("Y");
$thismonthName = date("M.", mktime(0, 0, 0, $thisMonth,0,$year));
if ($thisMonth < 12) {
$nextmonthName = date("M.", mktime(0, 0, 0, $nextMonth,1,$year));
} else {
$nextMonth = 1;
$nextmonthName = date("M.", mktime(0, 0, 0, $nextMonth,1,$nextYear));
}
$thisDate = date('M j', strtotime($nextmonthName . $year . "first friday"));
print ("second friday next month is " . $thisDate);

但是把它修改为只有下个月,就像这样,

$thisMonth = date('m');
$year = date("Y");
$thismonthName = date("M.", mktime(0, 0, 0, $thisMonth,0,$year));
if ($thisMonth < 12) {
$nextmonthName = date("M.", mktime(0, 0, 0, $nextMonth,0,$year));
} else {
$nextMonth = 1;
$nextmonthName = date("M.", mktime(0, 0, 0, $nextMonth,0,$nextYear));
}
$thisDate = date('M j', strtotime($nextmonthName . $year . "first friday"));
print ("second friday next month is " . $thisDate);

返回 11 月 8 日,即 11 月的第二个星期五。这是为什么?

4

2 回答 2

3

你真的应该调查DateTime, DateInterval,DatePeriod类。他们使这种事情变得微不足道。

$date = new DateTime();
$interval = DateInterval::createFromDateString('second friday of next month');
$date->add($interval);
echo 'Second Friday next month is ' . $date->format('Y-m-d');

或获得接下来 3 个月的第二个星期五:

$date = new DateTime();
$recurrence_count = 3;
$interval = DateInterval::createFromDateString('second friday of next month');
$period = new DatePeriod($date, $interval, $recurrence_count);
foreach ($period as $dt) {
    echo $dt->format('Y-m-d');
}
于 2013-10-09T21:47:07.273 回答
1

你的代码太复杂了。

$secondNextFriday = new DateTime('first friday of +2 months'); // First friday in december
于 2013-10-09T21:47:17.193 回答