0

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

在这里,我尝试为 $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
4

2 回答 2

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";
}

这种创建初始日期的方式和这种循环方式的优势在于,所有内容(支付次数、要添加的天数和计算日期的输出格式)都只在代码中编写一次。如果您将来需要更改其中任何一个,您只需在一个地方进行更改。

于 2013-08-09T22:20:19.093 回答
0

我的评论似乎达成了共识,所以我将在此处正式发布。

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

今天对于您的一段代码来说是一个奇怪的情况,一年只发生几次,因为您将 30 天添加到8 月 9(8/9),变成9 月 8(9/8)。然后您将其重新格式化为8 月 9(9/8 -> 8/9),这就是为什么相同的日期会一遍又一遍地出现。

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

于 2013-08-10T01:14:11.697 回答