Получение даты в прошлом месяце в php

Я хочу получить дату в прошлом месяце. Я написал это:

$prevmonth = date('M Y'); 

Который дает мне текущий месяц / год. Я не могу сказать, следует ли использовать strtotime , mktime . Что-то в метку времени? Должен ли я добавить что-то потом для сброса, чтобы дата не была установлена ​​в прошлом месяце во всем всем для всех временных меток на моем сайте? Я пытаюсь RTM, но мне сложно понять это.

Просто получить дату последнего месяца

 echo date("Ynj", strtotime("first day of previous month")); echo date("Ynj", strtotime("last day of previous month")); 

3 ноября возвращается

 2014-10-1 2014-10-31 
 echo strtotime("-1 month"); 

Это точно выведет метку времени за последний месяц. После этого вам не нужно ничего менять. Если вы хотите, чтобы это было в английском формате после этого, вы можете использовать date () для форматирования метки времени, то есть:

 echo date("Ymd H:i:s",strtotime("-1 month")); 
 $prevmonth = date('M Y', strtotime("last month")); 

если вы хотите получить только предыдущий месяц, то вы можете использовать как как следующее

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

если вы хотите получить те же дни предыдущего месяца, то вы можете использовать как как следующее ..

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

если вы хотите получить последнюю дату предыдущего месяца, тогда вы можете использовать как следующий …

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

если вы хотите получить первую дату предыдущего месяца, тогда вы можете использовать как следующий …

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

Нашел это неправильно, если предыдущие месяцы короче текущего.

 echo date("Ymd H:i:s",strtotime("-1 month")); 

Попробуйте 30 марта, и вы получите 2012-03-01 вместо 2012-02 …

Разработка лучшего решения …

Неправильные ответы:

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

Причина в том, что текущий месяц составляет 30 + дней, но в предыдущем месяце 29 и меньше $ lastMonth будет таким же, как и в текущем месяце.

например

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

Правильный ответ будет:

 echo date("mY", strtotime("first day of previous month")); => 02-2016 echo sprintf("%02d",date("m")-1) . date("-Y"); => 02-2016 echo date("mY",mktime(0,0,0,date("m")-1,1,date("Y"))); => 02-2016 
 public function getLastMonth() { $now = new DateTime(); $lastMonth = $now->sub(new DateInterval('P1M')); return $lastMonth->format('Ym'); } 

echo date ('Y', strtotime ("- 1 год")); //в прошлом году
echo date ('d', strtotime ("- 1 день")); //последний день
echo date ('m', strtotime ("- 1 месяц")); //прошлый месяц

Вы можете использовать strtotime , что отлично подходит для таких ситуаций:

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

Вы получите:

 string '2009-11' (length=7) 
 $time = mktime(0, 0, 0, date("m"),date("d")-date("t"), date("Y")); $lastMonth = date("dmY", $time); 

ИЛИ

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

работает 30.03.2012

О, я понял это, пожалуйста, проигнорируйте, если у вас есть такая же проблема, я сделал в этом случае:

 $prevmonth = date("MY",mktime(0,0,0,date("m")-1,1,date("Y"))); 
 $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); 

Меня устраивает:

Сегодня: 31/03/2012

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

Используйте этот короткий код для получения предыдущего месяца для любой заданной даты:

 $tgl = '25 january 2012'; $prevmonth = date("MY",mktime(0,0,0,date("m", strtotime($tgl))-1,1,date("Y", strtotime($tgl)))); echo $prevmonth; 

Результат – декабрь 2011 года. Работает на месяц с более коротким днем ​​с предыдущим месяцем.

Если вы хотите получить первую дату предыдущего месяца, то вы можете использовать как …: $prevmonth = date('MY 1', strtotime('-1 months')); что? первая дата всегда будет 1: D

Этот вопрос довольно старый, но здесь все равно. Если вы пытаетесь получить только предыдущий месяц, и день не имеет значения, вы можете использовать это:

 $date = '2014-01-03'; $dateTime = new DateTime($date); $lastMonth = $dateTime->modify('-' . $dateTime->format('d') . ' days')->format('F Y'); echo $lastMonth; // 'December 2013'