在php中获取上个月的date

我想得到上个月的date。 我写了这个:

$prevmonth = date('M Y'); 

这给了我当前的月份/年份。 我不知道是否应该使用strtotimemktime 。 什么时间戳? 我需要添加一些事后重置,以便在我的网站上的所有时间戳的date没有设置为上个月? 我正在尝试RTM,但我很难弄清楚这一点。

得到上个月的date很简单

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

在11月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')); 

如果你想获得前一个月的最后一个date,那么你可以使用如下…

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

如果你想获得上个月的第一个date,那么你可以使用像下面的…

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

当前几个月比现在短时发现这个错误。

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

尝试三月三十号,你会得到2012-03-01,而不是2012-02 …

制定更好的解决scheme…

不正确的答案是:

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

原因是如果当前月份是30天以上,但上个月是29天,并且较less月份月份将与当前月份相同。

例如

 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'); } 

回声date('Y',strtotime(“ – 1 year”)); //去年
echo date('d',strtotime(“ – 1 day”)); //最后一天
echo date('m',strtotime(“ – 1 month”)); //上个月

你可以使用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 

使用这个简短的代码来获得任何给定date的上个月:

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

结果是2011年12月。与上个月的date较短的一个月工作。

如果你想获得上个月的第一个date,那么你可以使用如下… $prevmonth = date('MY 1', strtotime('-1 months')); 什么? 第一个date将永远是1:D

这个问题是相当古老的,但无论如何。 如果你只想得到前一个月,那一天不重要,你可以使用这个:

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