什么是从给定日期php获得下个月和上个月的最佳解决方案

时间:2012-01-25 05:42:14

标签: php

我希望从给定日期开始接下来的月份。这是我的代码。

$ month ='2011-01-20';

$ prevMOnth = funP($ month); $ nextMonth = funN($ month);

这样做的最佳解决方案是什么。

5 个答案:

答案 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'