- mktime: documentation ( source)
- date: documentation ( source)
- min: documentation ( source)
<?php
$date = mktime(0, 0, 0, 1, 31); // midnight Jan 31st
$nextMonth = mktime(0, 0, 0, date('n', $date) + 1, 1, date('Y', $date));
$newDate = mktime(0, 0, 0, date('n', $nextMonth), min(date('t', $nextMonth), date('j', $date)), date('Y', $nextMonth));
echo date('Y-m-d h:i:s', $newDate);