Getting last month's date in php

PhpDate

Php Problem Overview


I want to get last month's date. I wrote this out:

$prevmonth = date('M Y');

Which gives me the current month/year. I can't tell if I should use strtotime, mktime. Something to the timestamp? Do I need to add something afterwards to reset so that the date isn't set to last month throughout everything for all timestamps on my site? I'm trying to RTM but it's hard for me to figure this out.

Php Solutions


Solution 1 - Php

It's simple to get last month date

echo date("Y-n-j", strtotime("first day of previous month"));
echo date("Y-n-j", strtotime("last day of previous month"));

at November 3 returns

2014-10-1
2014-10-31

Solution 2 - Php

echo strtotime("-1 month");

That will output the timestamp for last month exactly. You don't need to reset anything afterwards. If you want it in an English format after that, you can use date() to format the timestamp, ie:

echo date("Y-m-d H:i:s",strtotime("-1 month"));

Solution 3 - Php

$prevmonth = date('M Y', strtotime("last month"));

Solution 4 - Php

Incorrect answers are:

$lastMonth = date('M Y', strtotime("-1 month"));
$lastDate = date('Y-m', strtotime('last month'));

The reason is if current month is 30+ days but previous month is 29 and less $lastMonth will be the same as current month.

e.g.

If $currentMonth = '30/03/2016';
echo $lastMonth = date('m-Y', strtotime("-1 month")); => 03-2016
echo $lastDate = date('Y-m', strtotime('last month')); => 2016-03

The correct answer will be:

echo date("m-Y", strtotime("first day of previous month")); => 02-2016
echo sprintf("%02d",date("m")-1) . date("-Y"); => 02-2016
echo date("m-Y",mktime(0,0,0,date("m")-1,1,date("Y"))); => 02-2016

Solution 5 - Php

Found this one wrong when the previous months is shorter than current.

echo date("Y-m-d H:i:s",strtotime("-1 month"));

Try on March the 30th and you will get 2012-03-01 instead of 2012-02...

Working out on better solution...

Solution 6 - Php

echo date('Y',strtotime("-1 year"));		//last year<br>
echo date('d',strtotime("-1 day"));		//last day<br>
echo date('m',strtotime("-1 month"));		//last month<br>

Solution 7 - Php

if you want to get just previous month, then you can use as like following

$prevmonth = date('M Y', strtotime('-1 months'));

if you want to get same days of previous month, Then you can use as like following ..

$prevmonth = date('M Y d', strtotime('-1 months'));

if you want to get last date of previous month , Then you can use as like following ...

$prevmonth = date('M Y t', strtotime('-1 months'));

if you want to get first date of previous month , Then you can use as like following ...

$prevmonth = date('M Y 1', strtotime('-1 months'));

Solution 8 - Php

public function getLastMonth() {
    $now = new DateTime();
    $lastMonth = $now->sub(new DateInterval('P1M'));
    return $lastMonth->format('Ym');
}

Solution 9 - Php

Use this short code to get previous month for any given date:

$tgl = '25 january 2012';

$prevmonth = date("M Y",mktime(0,0,0,date("m", strtotime($tgl))-1,1,date("Y", strtotime($tgl))));
echo $prevmonth;

The result is December 2011. Works on a month with shorter day with previous month.

Solution 10 - Php

$lastMonth = date('M Y', strtotime("-1 month"));
var_dump($lastMonth);
$lastMonth = date('M Y', mktime(0, 0, 0, date('m') - 1, 1, date('Y')));
var_dump($lastMonth);

Solution 11 - Php

Oh I figured this out, please ignore unless you have the same problem i did in which case:

$prevmonth = date("M Y",mktime(0,0,0,date("m")-1,1,date("Y")));

Solution 12 - Php

You can use strtotime, which is great in this kind of situations :

$timestamp = strtotime('-1 month');
var_dump(date('Y-m', $timestamp));

Will get you :

string '2009-11' (length=7)

Solution 13 - Php

$time = mktime(0, 0, 0, date("m"),date("d")-date("t"), date("Y"));
$lastMonth = date("d-m-Y", $time);

OR

$lastMonth = date("m-Y", mktime() - 31*3600*24);

works on 30.03.2012

Solution 14 - Php

This question is quite old but here goes anyway. If you're trying to get just the previous month and the day does not matter you can use this:

$date = '2014-01-03';

$dateTime = new DateTime($date);

$lastMonth = $dateTime->modify('-' . $dateTime->format('d') . ' days')->format('F Y');

echo $lastMonth; // 'December 2013'

Solution 15 - Php

The best solution I have found is this:

function subtracMonth($currentMonth, $monthsToSubtract){
		$finalMonth = $currentMonth;
		for($i=0;$i<$monthsToSubtract;$i++) {
			$finalMonth--;
			if ($finalMonth=='0'){
				$finalMonth = '12';
			}

		}
		return $finalMonth;

	}

So if we are in 3(March) and we want to subtract 5 months that would be

subtractMonth(3,5);

which would give 10(October). If the year is also desired, one could do this:

function subtracMonth($currentMonth, $monthsToSubtract){
	$finalMonth = $currentMonth;
	$totalYearsToSubtract = 0;
	for($i=0;$i<$monthsToSubtract;$i++) {
		$finalMonth--;
		if ($finalMonth=='0'){
			$finalMonth = '12';
			$totalYearsToSubtract++;
		}

	}
    //Get $currentYear
    //Calculate $finalYear = $currentYear - $totalYearsToSubtract 
	//Put resulting $finalMonth and $finalYear into an object as attributes
    //Return the object

}

Solution 16 - Php

It works for me:

Today is: 31/03/2012

echo date("Y-m-d", strtotime(date('m', mktime() - 31*3600*24).'/01/'.date('Y').' 00:00:00')); // 2012-02-01
echo  date("Y-m-d", mktime() - 31*3600*24); // 2012-02-29

Solution 17 - Php

If you want to get first date of previous month , Then you can use as like following ... $prevmonth = date('M Y 1', strtotime('-1 months')); what? first date will always be 1 :D

Solution 18 - Php

Simply get last month.

Example:

Today is: 2020-09-02

Code:

echo date('Y-m-d', strtotime(date('Y-m-d')." -1 month"));

Result: > 2020-08-02

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionpg.View Question on Stackoverflow
Solution 1 - PhpOzzyCzechView Answer on Stackoverflow
Solution 2 - PhpzombatView Answer on Stackoverflow
Solution 3 - PhpScharrelsView Answer on Stackoverflow
Solution 4 - PhpFuryView Answer on Stackoverflow
Solution 5 - PhpJay_69View Answer on Stackoverflow
Solution 6 - PhpVaishuView Answer on Stackoverflow
Solution 7 - PhpMd. Maruf HossainView Answer on Stackoverflow
Solution 8 - Phpuser1343300View Answer on Stackoverflow
Solution 9 - PhpabdulView Answer on Stackoverflow
Solution 10 - Phpbloody numenView Answer on Stackoverflow
Solution 11 - Phppg.View Answer on Stackoverflow
Solution 12 - PhpPascal MARTINView Answer on Stackoverflow
Solution 13 - PhpPaulView Answer on Stackoverflow
Solution 14 - PhpJay KravetzView Answer on Stackoverflow
Solution 15 - PhpRafael AnschauView Answer on Stackoverflow
Solution 16 - PhpYiannis ChristodoulouView Answer on Stackoverflow
Solution 17 - Phpuser2846324View Answer on Stackoverflow
Solution 18 - PhpSL-phpdeveloperView Answer on Stackoverflow