为什么下面的代码会在11月的第二个周五返回,但在12月的第一个星期五?

时间:2013-10-09 21:35:07

标签: php date

抱歉,如果这是重复的话。为什么以下代码错误如此?它将于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月的第二个星期五。那是为什么?

2 个答案:

答案 0 :(得分:3)

您真的应该调查DateTimeDateIntervalDatePeriod类。他们使这种事情变得微不足道。

$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');
}

答案 1 :(得分:1)

你的代码太复杂了。

$secondNextFriday = new DateTime('first friday of +2 months'); // First friday in december