如何递减 php 日期时间对象上的月份,直到它与第二个日期时间对象的月份匹配



我有两个对象$o_NewRegDate(注册日期)和$o_NewNowDate(当前日期)。

如果我们转储 $o_NewRegDate 的年份和月份:

var_dump (date_format($o_NewRegDate, 'Y-m'));
string '2009-09' (length=7)

如果我们转储 $o_NewNowDate 的年份和月份:

var_dump (date_format($o_NewNowDate, 'Y-m'));
    string '2013-09' (length=7)
减少

$o_NewNowDate 中的月份(将每个迭代存储在数组中)直到我们到达 $o_NewRegDate 的年份和月份的最佳方法是什么?

所需的输出数组如下所示:

array (size=61)
  '2013-09-01' => string '09-2013' (length=7)
  '2013-08-01' => string '08-2013' (length=7)
  '2013-07-01' => string '07-2013' (length=7)
  (...)
  '2010-01-01' => string '01-2010' (length=7)
  '2009-12-01' => string '12-2009' (length=7)
  '2009-11-01' => string '11-2009' (length=7)
  '2009-10-01' => string '10-2009' (length=7)
  '2009-09-01' => string '09-2009' (length=7)
$o_NewRegDate = '2009-09-01'; $o_NewNowDate = '2013-09-01'; 
$iDateStart = strtotime( $o_NewRegDate  );
$iDateEnd = strtotime( $o_NewNowDate );
$iEnd = ( $iDateEnd - $iDateStart ) / 2678400; //60*60*24*31
$aDate = array();
for( $i = 0; $i <= $iEnd; $i++ ) {
   $aDate[] = date('Y-m-d', strtotime('+'. $i .' month', $iDateStart));
}
$aDate = array_reverse( $aDate );

自己改进,尤其是$iEnd变量。

$o_NewRegDate = '2009-09-01';
$o_NewNowDate = '2013-09-18';
$startDate = new DateTime($o_NewNowDate);
echo 'Start date: ', $startDate->format('Y-m-d') , PHP_EOL;
$endDate = new DateTime($o_NewRegDate);
echo 'End date: ', $endDate->format('Y-m-d') , PHP_EOL;
$interval = new DateInterval('P1M');
$monthPeriod = new DatePeriod ($endDate, $interval, $startDate);
foreach ($monthPeriod as $key => $monthDate) {
   echo $monthDate->format('Y-m') , PHP_EOL;
}

使用这个简单的代码。

$date2='2014-07-12';
$monthArr=explode('-',$date2);
$numDays=cal_days_in_month(CAL_GREGORIAN, $monthArr[1], $monthArr[2]);
$tempDate=date('Y-m-d',strtotime($date2));
$regDate=date('Y-m-d',strtotime("-$numDays days",strtotime($tempDate)));

最新更新