Bạn có thể thử chức năng này để thêm tháng đến một đối tượng datetime
/**
*
* @param \DateTime $date DateTime object
* @param int $monthToAdd Months to add at time
*/
function addMonth(\DateTime $date, $monthToAdd)
{
$year = $date->format('Y');
$month = $date->format('n');
$day = $date->format('d');
$year += floor($monthToAdd/12);
$monthToAdd = $monthToAdd % 12;
$month += $monthToAdd;
if ($month > 12) {
$year ++;
$month = $month % 12;
if ($month === 0) {
$month = 12;
}
}
if (! checkdate($month, $day, $year)) {
$newDate = \DateTime::createFromFormat('Y-n-j', $year . '-' . $month . '-1');
$newDate->modify('last day of');
} else {
$newDate = \DateTime::createFromFormat('Y-n-d', $year . '-' . $month . '-' . $day);
}
$newDate->setTime($date->format('H'), $date->format('i'), $date->format('s'));
return $newDate->format('Y-m-d');
}
echo addMonth(new \DateTime('2015-01-30'), 1); //2015-02-28
echo addMonth(new \DateTime('2015-01-30'), 2); //2015-03-30
echo addMonth(new \DateTime('2015-01-30'), 3); //2015-04-30
Nguồn
2015-02-05 18:39:57
@all: Liệu thi s một lỗi thực sự? Điều này rõ ràng là phá vỡ khả năng sử dụng và dứt khoát phá vỡ rất nhiều ứng dụng. – Sliq