Получение даты последнего месяца в php
Я хочу получить дату в прошлом месяце. Я написал это:
$prevmonth = date('M Y');
что дает мне текущий месяц/год. Я не могу сказать, если я должен использовать strtotime
,mktime
. Что-то с меткой времени? Нужно ли мне что-то добавить после сброса, чтобы дата не была установлена на последний месяц во всем для всех временных меток на моем сайте? Я пытаюсь RTM, но мне трудно понять это.
16 ответов:
это просто, чтобы получить дату в прошлом месяце
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
echo strtotime("-1 month");
это выведет метку времени за последний месяц точно. Вам не нужно ничего сбрасывать после этого. Если вы хотите его в английском формате, после этого вы можете использовать дата() в формате метки времени, т. е.:
echo date("Y-m-d H:i:s",strtotime("-1 month"));
если вы хотите получить только за предыдущий месяц, то вы можете использовать как после
$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'));
неправильные ответы:
$lastMonth = date('M Y', strtotime("-1 month")); $lastDate = date('Y-m', strtotime('last month'));
причина в том, что текущий месяц составляет 30+ дней, но предыдущий месяц составляет 29 и меньше $последний месяц будет таким же, как и текущий месяц.
например
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
нашел это неправильно, когда предыдущие месяцы короче, чем нынешний.
echo date("Y-m-d H:i:s",strtotime("-1 month"));
попробуйте 30 марта, и вы получите 2012-03-01 вместо 2012-02...
разработка лучшего решения...
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>
public function getLastMonth() { $now = new DateTime(); $lastMonth = $now->sub(new DateInterval('P1M')); return $lastMonth->format('Ym'); }
можно использовать
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")));
использовать этот короткий код, чтобы получить предыдущий месяц для любой заданной даты:
$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);
это работает для меня:
сегодня: 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
Если вы хотите получить первую дату предыдущего месяца , то вы можете использовать, как показано ниже ...
$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'