希望创建一个可以在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