3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Return the next month date given a date and month increment * * @param string $date Date to base from in Y-m-d format * @param integer $increment Number of months to increment */ function nextMonth($date, $increment) { // Grab the first day of month of the passed in date $firstOfDateMonth = \DateTime::createFromFormat('Y-m-d', $date)->modify('first day of this month'); // Grab the last day of month of the passed in date $thirtyFirstOfDateMonth = \DateTime::createFromFormat('Y-m-d', $date)->modify('last day of this month'); // Just get the number of the last day $thirtyFirstOfDateMonthNum = $thirtyFirstOfDateMonth->format('d'); unset($thirtyFirstOfDateMonth); // Using the first day of month of the passed in date add month increment and get last day of that month $thirtyFirstOfNextMonth = $firstOfDateMonth; unset($firstOfDateMonth); $thirtyFirstOfNextMonth->modify('+' . (int) $increment . ' month')->modify('last day of this month'); // Just get the number of the last day $thirtyFirstOfNextMonthNum = $thirtyFirstOfNextMonth->format('d'); // Turn the passed in date into a DateTime object $dayOfDateMonth = \DateTime::createFromFormat('Y-m-d', $date); // Just get the number of the day $dayOfDateMonthNum = $dayOfDateMonth->format('d'); // Using the passed in date add month increment and assume correct so far $dt = $dayOfDateMonth; unset($dayOfDateMonth); $dt->modify('+' . (int) $increment . ' month'); // If the last day of next month < last day of month from passed date && last day of next month < passed date day number if ($thirtyFirstOfNextMonthNum < $thirtyFirstOfDateMonthNum && $thirtyFirstOfNextMonthNum < $dayOfDateMonthNum) { // PHP has gone over the date we want so use last day of next month $dt = $thirtyFirstOfNextMonth; } unset($thirtyFirstOfNextMonth); return $dt->format('Y-m-d'); } echo nextMonth('2009-12-31', 2),"\n"; echo nextMonth('2010-01-31', 1),"\n"; echo nextMonth('2010-01-05', 1),"\n"; echo nextMonth('2010-12-05', 1),"\n"; echo nextMonth('2010-01-31', 13),"\n"; echo nextMonth('2010-01-31', 3),"\n"; echo nextMonth('2010-01-31', 0),"\n";
Output for git.master, git.master_jit, rfc.property-hooks
2010-02-28 2010-02-28 2010-02-05 2011-01-05 2011-02-28 2010-04-30 2010-01-31

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
46.3 ms | 404 KiB | 9 Q