php - 增加一个月至今 2020-01-30 取消下个月

标签 php date increment leap-year

给定的日期是 2019-12-30,我想为循环中的每次迭代添加 1 个月(所以 5 次)。

我写了这段代码:

$begin_date = '2019-12-30';
for ($i = 1; $i <= 5; $i++) {
    echo '<p>' . $begin_date . '</p>';

    $time = strtotime($begin_date);
    $begin_date = date("Y-m-d", strtotime("+1 month", $time));
}

我得到了以下结果

2019-12-30
2019-01-30
2019-03-01   invalid  --  I would expect 2019-02-28, at least last day
2019-04-01   invalid
2019-05-01   invalid

最佳答案

您可以使用 DateTime 对象,然后将该对象修改为下个月的最后一天。如果一个月中的第几天大于 30,则减去 1(因为无论如何它永远不会高于 31)。

$begin_date = '2019-12-30';
$date = new DateTime($begin_date);
for ($i = 1; $i <= 5; $i++) {
    echo '<p>'.$date->format("Y-m-d")."</p>\n";
    $date->modify("last day of next month");
    if ($date->format("d") > 30) {
        $date->modify("-1 day");
    }
}

如果您正在寻找一种更动态的方式(以防日期不总是 30 号),您可以复制原始对象,并从该月的原始日期中减去该月的当前日期。

$begin_date = '2019-12-30';
$date = new DateTime($begin_date);
$original_date = clone $date;

for ($i = 1; $i <= 5; $i++) {
    echo '<p>'.$date->format("Y-m-d")."</p>\n";
    $date->modify("last day of next month");
    if ($date->format("d") > $original_date->format("d")) {
        $date->modify("-".($date->format("d") - $original_date->format("d"))." day");
    }
}

关于php - 增加一个月至今 2020-01-30 取消下个月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57028571/

相关文章:

java - 对++ 和双重 Actor 感到好奇

php - 如何获得行位置?

java - 给定出生日期计算下一个生日日期?

使用 C 将日期格式从 dd/mm/yyyy 转换为 yyyy/mm/dd

sql - 从没有年份表的范围中选择所有年份

java - 如何在 Java 的嵌套 for 循环中用字母递增值?

php - 比较 2 个 phpinfo 设置

php - 我可以使用 ajax 而不是文本框更新标签吗?

php - 通过 PHP 将 MySQL 记录发送到 iOS

javascript - onclick counter = array.length 不起作用