我希望从给定日期开始接下来的月份。这是我的代码。
$ month ='2011-01-20';
$ prevMOnth = funP($ month); $ nextMonth = funN($ month);
这样做的最佳解决方案是什么。
答案 0 :(得分:8)
$next_month_ts = strtotime('2011-01-20 +1 month');
$prev_month_ts = strtotime('2011-01-20 -1 month');
$next_month = date('Y-m-d', $next_month_ts);
$prev_month = date('Y-m-d', $prev_month_ts);
答案 1 :(得分:1)
之前提到的代码在31天(或3月)的月末可能无效: $ prev_month_ts = strtotime('2011-01-20 -1 month');
这是获取上个月名称的最佳解决方案。获取本月第一天的日期,然后减去1天,然后获取月份名称:
date('F', strtotime('-1 day', strtotime(date('Y-m-01'))));
获取下个月的名字。获取本月最后一天的日期,然后添加1天,然后获取月份名称:
date('F', strtotime('+1 day', strtotime(date('Y-m-t'))));
答案 2 :(得分:0)
不知道这是否是最佳方式,但它内置于php中,请查看strtotime
编辑: 示例代码
$month = '2011-01-20';
$timestamp = strtotime ("+1 month",strtotime ($month));
$nextMonth = date("Y-m-d",$timestamp);
答案 3 :(得分:0)
$date = "2012-01-25";
$priormonth = date ('m', strtotime ( '-1 month' , strtotime ( $date )));
$futuremonth = date ('m', strtotime ( '+1 month' , strtotime ( $date )));
echo $priormonth; // this will equal 12
echo "<br/>";
echo $futuremonth; // this will equal 02
答案 4 :(得分:0)
&#39; -1个月&#39;当月份有31天时,解决方案是不可靠的(如提到的ALeX inSide)。 这是一个函数,它返回给定日期之前任意所需月份的日期:(它实际返回第1天的日期)
function getAnyPreviousMonthDate( $monthsBefore = null, $startDate = null )
{
$monthsBefore = $monthsBefore ?? 1; //php7
$monthsBefore = abs($monthsBefore);
$c = $startDate ?? date('Y-m-d');
for($i==0; $i<$monthsBefore; $i++) {
$c = date('Y-m-d', strtotime('first day of previous month '.$c));
}
return $c;
}
所以,如果我们将其称为:
echo getAnyPreviousMonthDate(3);
// we will get the first day of past 3 months from now
echo getAnyPreviousMonthDate(1, '2015-10-31');
// will return: '2015-09-01'