1

2 つの日付の間の四半期数を整数として返す関数を作成しようとしています。関数に渡される日付は通常、四半期末の日付ですが、日付の 1 つが任意の日付である場合を除きます。

基本的には、2 つの日付がどの四半期に該当するかを把握し、四半期数に整数の差を付けたいと考えています。

例えば

Q1 2013 -> Q2 2013 = 1
Q1 2013 -> Q4 2013 = 3 
Q2 2012 -> Q2 2013 = 4
Q4 2012 -> Q1 2013 = 1

これが私の機能です。私はそれが貧弱で、常に正しい答えを返さないことを認識していますが、誰かが助けてくれることを願っています...

function quarter_diff(DateTime $d1, DateTime $d2){
    //difference in months
    $diff = $d1->diff($d2);

    return ceil((($diff->format('%y') * 12) + $diff->format('%m')+1)/4);
}

ここにフィドルがあります:http://phpfiddle.org/lite/code/tiw-jx3

日付が四半期末の翌月にある場合、正しい答えが得られないことがわかります。

誰でも改善を提案できますか??

4

3 に答える 3

2

Mapleさんからの提案でこちらに決めました

function quarter_diff(DateTime $d1, DateTime $d2){
    //Returns the number of quarters between two dateTime objects
    if ($d2 > $d1){
        $dtmp = $d1;
        $d1=$d2;
        $d2=$dtmp;
        unset($dtmp);
    }
    $d1q = ceil($d1->format('m')/3);
    $d2q = ceil($d2->format('m')/3);
    $d1y = $d1->format('y');
    $d2y = $d2->format('y');

    return $d1q - $d2q + 4*($d1y - $d2y);
} 
于 2013-07-16T08:05:50.217 に答える