对于定期付款(每月),我需要下一个所有月份的同一日期,
o.n.,每月1号或每月15号(每月)

但它也应该保持第 31、30、28 和 29 天的日期。

例如,1/31/2014(第一个定期付款日期),2/28/2014 或 2/29/2014(第二个日期),3/31/2014(第三个)......等等)

例如 .1/15/2014 、 2/15/2014 、 3/15/2014 、 4/15/2014 、 5/15/2014 .. 等等

最佳答案

编辑答案:
您可以使用 DatePeriod 类:
这部分有效:
d >= 29 时有一个问题,那么 2 月之后的所有月份都会将付款登记到最后一天。

<?php
error_reporting(E_ALL);
$begin = new DateTime('2014-01-29');
$lastDayInterval = DateInterval::createFromDateString('last day of next month');
$monthInterval = new DateInterval('P1M');
$lastDays = new DatePeriod(clone $begin, $lastDayInterval, 12,
                            DatePeriod::EXCLUDE_START_DATE);
$addedMonthDays = new DatePeriod(clone $begin, $monthInterval, 12,
                            DatePeriod::EXCLUDE_START_DATE);

$lastDaysArray = array();
foreach ($lastDays as $lastDay) {
    $lastDaysArray[] = $lastDay;
}

$addedMonthDaysArray = array();
foreach ($addedMonthDays as $addedMonthDay) {
    $addedMonthDaysArray[] = $addedMonthDay;
}

for ($i = 0; $i < 12; $i++) {
    if ($addedMonthDaysArray[$i] > $lastDaysArray[$i]) {
        echo $lastDaysArray[$i]->format('Y-m-d') . PHP_EOL;
    } else {
        echo $addedMonthDaysArray[$i]->format('Y-m-d') . PHP_EOL;
    }
}
输出:
2014-02-28
2014-03-31
2014-04-30
2014-05-31
2014-06-30
2014-07-31
2014-08-31
2014-09-30
2014-10-31
2014-11-30
2014-12-31
2015-01-31
和:
$begin = new DateTime('2014-01-28');
它输出:
2014-02-28
2014-03-28
2014-04-28
2014-05-28
2014-06-28
2014-07-28
2014-08-28
2014-09-28
2014-10-28
2014-11-28
2014-12-28
2015-01-28

关于php - 如何获得下个月的同一天?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22300715/

10-09 08:33
查看更多