我想知道上个月的日期。我这样写:
$prevmonth = date('M Y');
这给了我当前的月份/年份。我不知道我是否应该使用strtotime
,mktime
。时间戳记了吗?我是否需要在事后添加一些内容以进行重置,以便在我网站上所有时间戳的所有时间中,日期都不设置为上个月?我正在尝试RTM,但很难解决。
Answers:
获取上个月的日期很简单
echo date("Y-n-j", strtotime("first day of previous month"));
echo date("Y-n-j", strtotime("last day of previous month"));
11月3日返回
2014-10-1
2014-10-31
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-m-d H:i:s",strtotime("-1 month"));
尝试3月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)
。
我发现的最佳解决方案是:
function subtracMonth($currentMonth, $monthsToSubtract){
$finalMonth = $currentMonth;
for($i=0;$i<$monthsToSubtract;$i++) {
$finalMonth--;
if ($finalMonth=='0'){
$finalMonth = '12';
}
}
return $finalMonth;
}
因此,如果我们在3月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/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'
只需在上个月获得即可。
今天是:2020-09-02
码:
echo date('Y-m-d', strtotime(date('Y-m-d')." -1 month"));
结果:
2020-08-02
31
1月而不是1月或8月(如2020 May 31
变为2020 April 31
,则不存在)会发生什么情况
$time = strtotime('2011-03-30 01:01:01'); echo date('r', strtotime('-1 month', $time));
这个代码将返回Wed,2011年3月2日,星期三,01:01:01-不是2月!使用strtotime('first day of previous month')
替代