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

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

$prevmonth = date('M Y');

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

Ответ 1

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

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

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

2014-10-1
2014-10-31

Ответ 2

echo strtotime("-1 month");

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

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

Ответ 3

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

Ответ 4

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

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

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

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

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

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

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

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

Ответ 5

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

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

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

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

Ответ 6

Неверные ответы:

$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("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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

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

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

Вы получите:

string '2009-11' (length=7)

Ответ 11

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

ИЛИ

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

работает 30.03.2012

Ответ 12

$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);

Ответ 13

Это работает для меня:

Сегодня: 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

Ответ 14

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

$tgl = '25 january 2012';

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

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

Ответ 15

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

Ответ 16

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

$date = '2014-01-03';

$dateTime = new DateTime($date);

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

echo $lastMonth; // 'December 2013'