当前位置: 首页 > 面试题库 >

PHP:在日期中添加月份,但不超过该月的最后一天

盛嘉
2023-03-14
问题内容

希望创建一个可以在PHP中完成此功能的函数。

我需要在日期中添加多个月,但不能超过该月的最后一天。

例如:

Add 1 month to January (1-28th), 2011, should produce February (1-28th), 2011.
Add 1 month to January 30th, 2011, should produce February 28th, 2011.
Add 3 months to January 31st, 2011, should produce April 30th, 2011.
Add 13 months to January 30th, 2011, should produce February 29th, 2012.
Add 1 month to October 31st, 2011, should produce November 30th, 2011.

如果我在PHP中使用日期加法,则会发生超限:

Adding 1 month to January 30th, 2011, results in March 2nd, 2011.

我的规范不允许我超支一个月。

什么是最简单的方法来做到这一点?


问题答案:

您可以比较添加1个月之前和之后的月份。如果不一样,您超出了下个月。

function add($date_str, $months)
{
    $date = new DateTime($date_str);

    // We extract the day of the month as $start_day
    $start_day = $date->format('j');

    // We add 1 month to the given date
    $date->modify("+{$months} month");

    // We extract the day of the month again so we can compare
    $end_day = $date->format('j');

    if ($start_day != $end_day)
    {
        // The day of the month isn't the same anymore, so we correct the date
        $date->modify('last day of last month');
    }

    return $date;
}

$result = add('2011-01-28', 1);   // 2011-02-28
$result = add('2011-01-31', 3);   // 2011-04-30
$result = add('2011-01-30', 13);  // 2012-02-29
$result = add('2011-10-31', 1);   // 2011-11-30
$result = add('2011-12-30', 1);   // 2011-02-28


 类似资料:
  • 问题内容: 我希望有人可以帮助我。 我想在数据库日期中增加一个月,但我想防止在最后一天的两个月中跳过两个月。 例如,我可能有: 2009年1月31日 我想得到 2009年2月28日 并不是 2009年3月2日 下一个日期是 2009年3月28日 2009年6月28日 等等。 oracle中是否已经有执行这种操作的功能? 编辑 是的 我想每个月将具有某些状态的所有记录复制到下一个(因此用户不必每月再

  • 问题内容: 我想在用户输入的结束日期前加上2个月。如何在结束日期前加上2个月并显示呢? 任何帮助表示赞赏。谢谢! 问题答案: 您需要获取增加数月的业务规则。简单的解决方案是: 但是,这将从7月31日更改为9月31日,并将转换为10月1日。同样,1月31日加上1个月是2月31日,根据是否是leap年,它将转换为3月2日或3月3日。 您可能希望第一次是9月30日,第二次是2月28日或29日(取决于是否

  • 我不确定这是否可能? 我得拿到密码才能读 今天的月份即2月今天的日期即17月底的日期即31日,然后是一年中的其他11个月,在一行中按顺序排列 8月1日-31日|9月|10月|11月|12月|1月|2月|3月|4月|5月|6月|7月 请以最佳方式提供任何建议? 多谢 定时(timing的缩写)

  • 问题内容: 我试图弄清楚如何在Pandas数据框中的日期中添加3个月,同时将其保持为日期格式,因此可以使用它来查找范围。 这是我尝试过的: 但是,出现以下错误: 问题答案: 你可以用 另一种使用方式 细节

  • 问题内容: 如何使用PHP获得每月的最后一天? 鉴于: 我要2009-11-30; 并给予 我想要2009-12-31。 问题答案: 返回给定日期的月份中的天数请参阅文档以获取有关信息:

  • 问题内容: 我想在JavaScript中添加几个月的日期。 例如:我要插入日期(格式),现在我要在此日期前加上8个月。我希望结果是。 因此,增加月份时,年份也可能增加。 问题答案: 已于2019年6月25日更正: 旧