Я хочу получить дату в прошлом месяце. Я написал это:
$prevmonth = date('M Y');
Что дает мне текущий месяц / год. Я не могу сказать , если я должен использовать strtotime
, mktime
. Что-то с меткой времени? Нужно ли мне добавлять что-то потом для сброса, чтобы дата не была установлена на последний месяц во всем для всех временных меток на моем сайте? Я пытаюсь RTM, но мне трудно это понять.
$time = strtotime('2011-03-30 01:01:01'); echo date('r', strtotime('-1 month', $time));
этот вернет среду, 02 марта 2011 01:01:01 - не февраль! Использоватьstrtotime('first day of previous month')
вместоecho strtotime("-1 month");
Это точно выведет метку времени за последний месяц. После этого ничего сбрасывать не нужно. Если после этого вы хотите, чтобы он был в английском формате, вы можете использовать date () для форматирования метки времени, то есть:
echo date("Y-m-d H:i:s",strtotime("-1 month"));
источник
$prevmonth = date('M Y', strtotime("last month"));
источник
Неправильные ответы:
$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')); => 2016-03
Правильный ответ будет:
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
источник
если вы хотите получить только предыдущий месяц, вы можете использовать следующее
$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'));
источник
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>
источник
Нашел это неправильно, когда предыдущие месяцы короче текущего.
echo date("Y-m-d H:i:s",strtotime("-1 month"));
Попробуйте 30 марта, и вы получите 2012-03-01 вместо 2012-02 ...
В поисках лучшего решения ...
источник
public function getLastMonth() { $now = new DateTime(); $lastMonth = $now->sub(new DateInterval('P1M')); return $lastMonth->format('Ym'); }
источник
2015-10-31
в PHP 5.5 и 5.6.11. Вы получите201510
такое же поведение, как и сstrtotime('- 1 month)
.Используйте этот короткий код, чтобы получить предыдущий месяц для любой даты:
$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 года. Работает по месяцу, день которого короче предыдущего месяца.
источник
$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);
источник
Вы можете использовать
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("d-m-Y", $time);
ИЛИ ЖЕ
$lastMonth = date("m-Y", mktime() - 31*3600*24);
работает 30.03.2012
источник
О, я понял это, пожалуйста, игнорируйте, если у вас нет той же проблемы, что и я, в этом случае:
$prevmonth = date("M Y",mktime(0,0,0,date("m")-1,1,date("Y")));
источник
Лучшее решение, которое я нашел, это следующее:
function subtracMonth($currentMonth, $monthsToSubtract){ $finalMonth = $currentMonth; for($i=0;$i<$monthsToSubtract;$i++) { $finalMonth--; if ($finalMonth=='0'){ $finalMonth = '12'; } } return $finalMonth; }
Итак, если мы находимся в 3 (марте), и мы хотим вычесть 5 месяцев, это будет
subtractMonth(3,5);
что даст 10 (октябрь). Если год желателен, можно сделать так:
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 }
источник
Меня устраивает:
Сегодня: 31 марта 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
источник
Если вы хотите получить первую дату предыдущего месяца, тогда вы можете использовать следующее ...
$prevmonth = date('M Y 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'
источник
Просто получите последний месяц.
Пример:
Сегодня: 2020-09-02
Код:
echo date('Y-m-d', strtotime(date('Y-m-d')." -1 month"));
Результат:
источник
31
и месяц не являются январем или августом (например,2020 May 31
становится2020 April 31
, что не существует)