2016-04-08 7 views
-2

これは簡単な質問ですが、解決策を見つけることができません。私は今、適切な解決策を見つけるためにかなりの日インターネットを掘り起こしてきました。私は解決策が単純でなければならないことを知っていますが、私はそれを私の心の中で理解することはできません。日数から月数を計算する

 $datetimeToday = new DateTime(date('d M Y')); 
     $datetimeAccountExpirationDate= new DateTime($account->expiration_date); 
     $interval = $datetimeToday->diff($datetimeAccountExpirationDate); 
     $days = $interval->format('%R%a'); 
     $days = intval($days); 

     if($days <= 0): 
      // calculate the number of months, a month is of 30 days (for this app) 
     endif; 

アカウントの有効期限が切れている日と現在の日の差分を計算しています。アカウントの期限が切れている場合は+、アカウントの有効期限が切れている場合は-の値が得られます。私はintegetに変換してから0より小さい場合は、それに応じてクライアントのコストを計算できるように月数を計算する必要があります。私が開発しているアプリケーションでは、1ヶ月は正確な30 daysです。その上

if $days = 20 then $months = 1 // from 1 - 30, it should give 1 
    if $days = 35 then $months = 2 // from 31 - 60, it should give 2 

とを次のように

それは価値を与える必要があります。

EDIT:

var_dump($datetimeToday->diff($datetimeAccountExpirationDate)->d); // this would give me days 
var_dump($datetimeToday->diff($datetimeAccountExpirationDate)->m); // this would return 0 for days > 0 but < 30 
+0

を与えるだろう、私は 'のstrtotime()に慣れることをお勧めしたい;'と '日付()あなただけ使用する必要があります' – Derek

+0

月が30日か31日か2月が特別であるかどうか気にしないなら、簡単なモジュロ – AntoineB

答えて

0

それはこのような何かを実行しているのと同じくらい簡単です。

$dateは、希望する月の文字列表記です。 strtotimeはタイムスタンプ(この例では1460073600)に変換します。次にdateを使用し、t設定を使用すると、与えられた月の日数が返されます。この例では、変数$days_in_month30が表示されます。

$dateの場合は、任意の日付の表現を使用できます。例えば、日付などFeb 201629日あなたを与えるだろう...しかしFeb 2015はあなた28

関連する問題