Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP日期减去一个月返回错误的月份_Php_Date - Fatal编程技术网

PHP日期减去一个月返回错误的月份

PHP日期减去一个月返回错误的月份,php,date,Php,Date,当前日期为2017年3月29日 当我用PHP减去2个月,我得到1月份 $prevmonth = date('M', strtotime('-2 months')); echo $prevmonth; 但当我减去1个月时,它给出了三月 $prevmonth = date('M', strtotime('-1 months')); echo $prevmonth; 如评论所述,没有2月29日 2月29日变成3月1日 您最好从中获取当前月号,-1,然后获取文本表示 $prevMonth = dat

当前日期为2017年3月29日

当我用PHP减去2个月,我得到
1月份

$prevmonth = date('M', strtotime('-2 months'));
echo $prevmonth;
但当我减去1个月时,它给出了三月

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

如评论所述,没有2月29日

2月29日变成3月1日

您最好从中获取当前月号,-1,然后获取文本表示

$prevMonth = date('n') - 1;
$prevMonthText = date('M', mktime(0, 0, 0, $prevMonth, 10));
或者,如果您的PHP版本允许(应该),您可以使用
DateTime

唯一的问题是,你可能已经发现,一月永远不会回到十二月。一个快速的三元语句将抓住这一点

$prevMonth = ((date('n') - 1) < 1) ? 12 : date('n') - 1;
$prevMonth=((日期('n')-1)<1)?12:日期('n')-1;
strotime()
使用30天的月份,2月份(今年)只有28天,因此无法在2月份生成有效日期。您可以使用当前日期
d
j
,减去上个月的日期(
-29天
):


这也将从
1月
获得
12月

因为没有第29天Februrary@JohnConde:至少今年没有。
$prevMonth = ((date('n') - 1) < 1) ? 12 : date('n') - 1;
$prevmonth = date('M', strtotime('-' . date('d') . ' days'));