PHP日期2周后每隔一周显示一次错误


PHP Date 2 weeks from now shows incorrect every other week

我在一个网站上显示一个公司的日期,该公司每隔一周举行一次会议。我遇到的问题是显示下一个日期。

例如,如果当前会议日期为2014年9月16日,则日期应显示为2014年10月30日。

然而,当距离2014年9月30日不到一周时,在本例中,日期将显示后一周;2014年10月7日,这是不正确的。

这是我正在使用的代码:

<?php
$dow   = 'tuesday';
$step  = 2;
$unit  = 'W';
$start = new DateTime(gmdate("Y-m-d", time()));
$end   = clone $start;
$start->modify($dow); // Move to first occurence
$end->add(new DateInterval('P1Y')); // Move to 1 year from start
$interval = new DateInterval("P{$step}{$unit}");
$period   = new DatePeriod($start, $interval, $end);
$count = 0;
echo('<h3>');
foreach ($period as $date) {
    if($count < 1){
        echo $date->format('D, d M Y'), PHP_EOL;
    }
    $count+=1;
}
echo('</h3>');
?>

如果会议每两周举行一次,您可以使用周数。

例如,如果会议在每偶数周的周二举行,你可以试试这个:

<?php
$today= new DateTime();
$nextTuesday = strtotime("next tuesday");
$week = $today->format("W");
echo("See you on ");
if($week % 2 == 0){
    echo(date("D d/m/Y",strtotime("+7 day", $nextTuesday)));
}
else {
    echo(date("D d/m/Y",$nextTuesday));
}
?>

您的代码示例与问题描述不匹配。

由于您通过new DateTime(gmdate("Y-m-d", time()));使用当前时间戳,PHP不知道上次会议是什么时候,只计算从下周二开始的两周,从今天开始的

使用DateTime进行描述的方法是设置一个固定的时间点:

$dow  = 'tuesday';
$step = 2;
$unit = 'W';
$start = new DateTime('2014-09-16');
$start->modify($dow);
$start->add(new DateInterval("P{$step}{$unit}"));
echo '<h3>'
    . $start->format('D, d M Y')
    . '</h3>';

如果你想输出明年的所有会议日期(正如你的代码所示):

$dow  = 'tuesday';
$step = 2;
$unit = 'W';
$start = new DateTime('2014-09-16');
$start->modify($dow);
$end = clone $start;
$end->add(new DateInterval('P1Y'));
$interval = new DateInterval("P{$step}{$unit}");
while ($start < $end) {
    $start->add($interval);
    echo '<h3>'
        . $start->format('D, d M Y')
        . '</h3>';
}

您可以使用Carbon-众所周知的PHP DateTime库。它将为您处理与DateTime相关的一切。试试

以下是Carbon的快速浏览。要添加2周后,您可以使用

echo Carbon::now()->addWeek(2);

从给定日期起增加2周,如2014年9月10日

echo Carbon::createFromDate(2014, 9, 10)->addWeek(2);