I have used the below PHP function to get the previous month,
$currmonth = date(\'m\', strtotime(\'-1 month\'));
It was working fine and I
You can use OOP with DateTime class and modify method:
$now = new DateTime();
$previousMonth = $now->modify('first day of previous month');
echo $previousMonth->format('m');
strtotime() works accurately. The problem is what you ask it to return.
"-1 month" is not the same as "previous month". It is the same as "subtract 1 from current month then normalize the result".
On 2017-05-31
, subtracting 1
from current month gets 2017-04-31
which is not a valid date. After normalization, it becomes 2017-05-01
, hence the result you get.
There are more than one way to get the value you need. For example:
// Today
$now = new DateTime('now');
// Create a date interval string to go back to the first day of the previous month
$int = sprintf('P1M%dD', $now->format('j')-1);
// Get the first day of the previous month as DateTime
$fdopm = $now->sub(new DateInterval($int));
// Verify it works
echo($fdopm->format('Y-m-d'));
// On 2017-05-31 it should print:
// 2017-04-01
If you just need to get the month number of previous month, the following should suffice.
$m = idate("m") - 1;
// wrap to previous year
if ($m < 1) {
$m = 12 - abs($m) % 12;
}
This works with arbitrary number of subtracted months.
Try strtotime("first day of last month")
.
The first day of
is the important part as detailed here.
Literally ask strtotime
for the 'first day of the previous month' this makes sure it selects the correct month:-
$currmonth = date("m", strtotime("first day of previous month"));