3

2つの日付の差を合計年数に変換しようとしていますが、現在これを使用しています:

 $datetime1 = new DateTime('2009-10-11'); 
 $datetime2 = new DateTime('2010-10-10');
 $interval = $datetime1->diff($datetime2);
 return $interval->format('%y');

これは int を返します (1 年未満の場合は 0、2 年未満の場合は 2 など)。

次のように、結果を10進数にする必要があります。

0.9~9ヶ月

1.2~1年2ヶ月

3.5~3歳5ヶ月

等々..

ありがとう!

4

3 に答える 3

5

完全な精度を気にしない場合:

return $interval->days / 365;

のようなこともできますreturn $interval->y + $interval->m / 12 + $interval->d / 365

@2unco のコメントを見るまで、奇妙な 10 進数規則に気付きませんでした。それは次のようになりますreturn $interval->y . '.' . $interval->m

于 2012-05-28T01:01:01.037 に答える
2

ここでは、まさにそれを行う関数と多くのオプションを確認できます: http://php.net/manual/es/function.date-diff.php#98615

    <?php 
/* 
* A mathematical decimal difference between two informed dates 
*
* Author: Sergio Abreu
* Website: http://sites.sitesbr.net
*
* Features: 
* Automatic conversion on dates informed as string.
* Possibility of absolute values (always +) or relative (-/+)
*/

function s_datediff( $str_interval, $dt_menor, $dt_maior, $relative=false){

       if( is_string( $dt_menor)) $dt_menor = date_create( $dt_menor);
       if( is_string( $dt_maior)) $dt_maior = date_create( $dt_maior);

       $diff = date_diff( $dt_menor, $dt_maior, ! $relative);

       switch( $str_interval){
           case "y": 
               $total = $diff->y + $diff->m / 12 + $diff->d / 365.25; break;
           case "m":
               $total= $diff->y * 12 + $diff->m + $diff->d/30 + $diff->h / 24;
               break;
           case "d":
               $total = $diff->y * 365.25 + $diff->m * 30 + $diff->d + $diff->h/24 + $diff->i / 60;
               break;
           case "h": 
               $total = ($diff->y * 365.25 + $diff->m * 30 + $diff->d) * 24 + $diff->h + $diff->i/60;
               break;
           case "i": 
               $total = (($diff->y * 365.25 + $diff->m * 30 + $diff->d) * 24 + $diff->h) * 60 + $diff->i + $diff->s/60;
               break;
           case "s": 
               $total = ((($diff->y * 365.25 + $diff->m * 30 + $diff->d) * 24 + $diff->h) * 60 + $diff->i)*60 + $diff->s;
               break;
          }
       if( $diff->invert)
               return -1 * $total;
       else    return $total;
   }

/* Enjoy and feedback me ;-) */
?>
于 2016-12-05T16:16:14.590 に答える