无法在循环内添加30天

时间:2013-08-09 22:12:57

标签: php date

我知道有无数其他帖子询问如何在现有日期添加天数,但我无法让它正常工作。

在这里,我尝试为$ numPayments的每次迭代添加30天到每个日期。

$numPayments = 5;
$nextPaymentDate = date('m-j-Y g:i a', strtotime("+30 days"));
for($i = 0; $i <= $numPayments; $i++) {

    echo $nextPaymentDate . "\r\r";
    $nextPaymentDate = date('m-j-Y g:i a', strtotime($nextPaymentDate . " + 30 days"));              
}

出于某种原因,它只是再次输出相同的日期:

09-8-2013 3:10 pm

09-8-2013 3:10 pm

09-8-2013 3:10 pm

09-8-2013 3:10 pm

09-8-2013 3:10 pm

09-8-2013 3:10 pm

2 个答案:

答案 0 :(得分:4)

$numPayments = 5;

$nextPaymentDate = new DateTime;

$interval = new DateInterval('P30D');

for ($i = 0; $i <= $numPayments; $i++) {
    $nextPaymentDate->add($interval);
    echo $nextPaymentDate->format('m-j-Y g:i a') . "\r\r";
}

这种创建初始日期和循环方式的好处是,所有内容(付款数量,添加天数和计算日期的输出格式)只需在代码中写入一次。如果您将来需要更改其中任何一个,您只需要在一个地方更改它。

答案 1 :(得分:0)

我的评论似乎已达成共识,因此我将在此正式发布。

PHP接受各种日期和时间格式,通常是最常见的格式,如documentation所示。美国人倾向于以MM/DD/YYYY格式撰写日期。在其他地方,日期通常写为DD/MM/YYYY。虽然使用了不同的分隔符,但PHP在其他一些格式中采用了这两种格式。您可以使用MM/DD/YYYYDD-MM-YYYY。但是,您尝试使用MM-DD-YYYY。更改为其他任何一种可接受的格式,您的问题应该得到解决。

今天是你的一段代码的奇怪案例,每年只发生几次,因为你要在 8月9日 th (8/9)增加30天),成为 9月8日 th (9/8)。然后将其重新格式化为 8月9日 th (9/8 - &gt; 8/9),这就是为什么同一个日期一遍又一遍出现。

我同意Tomas的回答,因为DateTime似乎比其他独立的日期和时间方法更好。但是,他没有解决您的错误格式的现有日期时间输入问题,这是问题的根源。我(未经测试)的猜测是在DateTime constructor中使用相同的字符串会导致相同的问题。