2014-09-22 63 views
0

我在一个网站上为每隔一周开会的公司显示一个日期。我遇到的问题是显示下一个日期。PHP日期2星期后每隔一周显示不正确

例如,如果本次会议是在2014年9月16日的日期应显示9月30日2014年

但是当它是不到一个星期,直到9月30日2014年这个例子中,日期将显示上周后; 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>'); 

?> 
+0

你不能使用strtotime()吗? – Khushboo 2014-09-22 09:31:05

+0

是的,您显示时间的方法不是问题。它显示了正确的日期每隔一个星期二,因为现在的代码不这样做。 – hbowley 2014-09-22 09:34:12

回答

0

而是重新发明轮子,你可以使用 Carbon - 众所周知PHP的DateTime库。它会为你处理与DateTime有关的所有事情。试试。

以下是对Carbon的简要介绍。 2周从现在加入,你可以使用

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

为了从给定日期添加2周,说2014年9月10日

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

+0

虽然这个链接可能回答这个问题,但最好在这里包含答案的重要部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 – 2014-09-22 10:11:44

+0

示例添加了James。谢谢。 – 2014-09-22 10:35:09

0

如果会议举行每隔第二个星期,你可以依靠周数。

例如如果会议在星期二每周举行一次,您可以试试:

<?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)); 
} 
?> 
0

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

由于您通过new DateTime(gmdate("Y-m-d", time()));使用当前时间戳,因此PHP不知道上次会议的时间,从下个星期二开始计算2周,从今天的

做你的描述,使用日期时间的方式,是通过在时间设定一个固定的点:

$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>'; 
} 
相关问题