Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
CRAP | |
100.00% |
10 / 10 |
MonthCalc | |
100.00% |
1 / 1 |
|
100.00% |
1 / 1 |
4 | |
100.00% |
10 / 10 |
calc | |
100.00% |
1 / 1 |
4 | |
100.00% |
10 / 10 |
<?php | |
namespace Puyo\Date; | |
/** | |
* 月内の日数の差を考慮した月計算クラス | |
* | |
* たとえば 3/31 の1ヶ月前は 2/28 とする。 | |
*/ | |
class MonthCalc | |
{ | |
/** | |
* | |
* @param \DateTime $dt | |
* @param int $offset | |
* @return \DateTime | |
*/ | |
public function calc(\DateTime $dt, $offset) { | |
if($offset === null) { | |
$offset = 1; | |
} | |
$result = clone $dt; | |
$day = $dt->format('j'); | |
if($offset >= 0) { | |
$dayOfNextMonth = $result->add(new \DateInterval('P'.$offset.'M'))->format('j'); | |
} else { | |
$dayOfNextMonth = $result->sub(new \DateInterval('P'.abs($offset).'M'))->format('j'); | |
} | |
if($day !== $dayOfNextMonth) { | |
$result->sub(new \DateInterval('P'.$dayOfNextMonth.'D')); | |
} | |
return $result; | |
} | |
} |