2017-11-30 14 views
-1

私のレンタル製品の日、週、および月間料金を計算する際に問題があります。PHP - 固定価格に基づいて毎週毎月および毎月の計算として

310毎日/毎週725/1660月刊

ロジックに来る:

日1 + 2日= 620しかし日1 + 2日+ 3日目= 930ました725(週単位)より大きい。だから、今週の価格は7日に達するまで適用されるべきです。

次に、
8日= 7日目+ 310 = 1035(未登録> 1660家賃)= 1345
9日目= 8日目+ 310(未登録> 1660家賃)
日10日= 9日目+ 310日= (ただし、1660月未満の賃料)ですが、2週間以上の価格と日数は14未満です。
したがって、725 + 725 = 1450を14日間適用する必要があります。
....
....
14日= 1450

次に、
15日= 14日目310 = (> 1660)
ここでは、月末までに1660を適用する必要があります。
....
....
日= 1660年30/31

私は成功した構築ではなくするために多くのことを試してみました。誰でも私をここで助けることができますか?

更新コード:ここで

<?php 

$perDayAmt=310; 
$perWeekAmt=725; 
$perMonthAmt=1660; 

$finalAmt=0; 
$start_date=new DateTime(date('Y-m-d'));//, strtotime("+12 days") 
$end_date=new DateTime(date('Y-m-d', strtotime("+14 days"))); 

$differenceInDays = $end_date->diff($start_date)->format("%a"); 
if($differenceInDays >0){ 

if($differenceInDays <= 7){ 
    if(($differenceInDays*$perDayAmt) <= $perWeekAmt){// 5 days amount <= $perWeekAmt amount 
     $finalAmt = $differenceInDays*$perDayAmt; //no. of days * $perDayAmt amount 
    }else{ 
     $finalAmt =$perWeekAmt; // $perWeekAmt amount 
    } 
}else{ 
    /*if(($differenceInDays%7) == 0 && ($perWeekAmt*($differenceInDays/7)) < $perMonthAmt){ 
     //14 < 30 && 14 % 7==0 && $perWeekAmt amount * [2 or 3 or 4 or 5] < $perMonthAmt amount 
     $finalAmt = $perWeekAmt*($differenceInDays/7); //$perWeekAmt amount * [2 or 3 or 4 or 5] 
    }else if(($differenceInDays%7) != 0 && ($perWeekAmt*($differenceInDays/7)) < $perMonthAmt){ 
     //10 < 30 && 10 % 7!=0 && 10 days amount > $perWeekAmt amount 
     $finalAmt =$perWeekAmt; // $perWeekAmt amount 
    }*/ 
    if(($differenceInDays%7) == 0) { 
     if(($perWeekAmt*($differenceInDays/7)) > $perMonthAmt){ 
      if(($differenceInDays%30) == 0) { 
       $finalAmt = $perMonthAmt*($differenceInDays/30); 
      }else{ 

      } 

     }else if(($perWeekAmt*($differenceInDays/7)) < $perMonthAmt){ 
      $finalAmt = $perWeekAmt*($differenceInDays/7); 
     } 
    } 
} 

echo $finalAmt;exit;  
} 

は、あなたがカートに製品を追加することができます参照リンクです:

https://www.zieglerrental.com/equipment/skid-steer-compact-loaders/cat-compact-track-loaders/cat-239d-compact-track-loader/

+0

あなたがしようとしたとどのようにそれが成功しなかった持っていますか? – jeroen

+0

ロジックをコードに追加してください。 –

+0

は28日、29日、30日または31日ですか?いつ1ヶ月プラス1日になるのですか? – Andreas

答えて

0

ではなくifまたはswitch-case文のブロックを書き込み、使用して3つの変数を持つmin()はこのタスクを簡潔に実行します。各$diffオカレンスの3つの値を比較するには、以下のデモスニペットの冗長出力を参照してください。

コード:(Demo

$pricing=['day'=>310,'week'=>725,'month'=>1660]; 
for($x=0; $x<33; ++$x){ 
    echo "$x : "; 
    $finalAmt=0; 
    $start_date=new DateTime('today'); 
    $end_date=new DateTime(date('Y-m-d',strtotime("+$x days"))); 

    $diff=$end_date->diff($start_date); 

    if($diff->y){$finalAmt+=$diff->y*12*$pricing['month'];} 

    if($diff->m){$finalAmt+=$diff->m*$pricing['month'];} 

    if($diff->d){ 
     $weeks=floor($diff->d/7); 
     $days=$diff->d%7; 
     $raw=$weeks*$pricing['week']+$days*$pricing['day']; 
     $weekup=$pricing['week']*($weeks+1); 
     $finalAmt+=min($raw,$weekup,$pricing['month']); // <-- here is the magic; min() on three variables 
    } 
    echo "\$$finalAmt"; 
    if($diff->d){echo " is min of: $raw & $weekup & {$pricing['month']}";} 
    echo "\n"; 
} 

出力:

0 : $0 
1 : $310 is min of: 310 & 725 & 1660 
2 : $620 is min of: 620 & 725 & 1660 
3 : $725 is min of: 930 & 725 & 1660 
4 : $725 is min of: 1240 & 725 & 1660 
5 : $725 is min of: 1550 & 725 & 1660 
6 : $725 is min of: 1860 & 725 & 1660 
7 : $725 is min of: 725 & 1450 & 1660 
8 : $1035 is min of: 1035 & 1450 & 1660 
9 : $1345 is min of: 1345 & 1450 & 1660 
10 : $1450 is min of: 1655 & 1450 & 1660 
11 : $1450 is min of: 1965 & 1450 & 1660 
12 : $1450 is min of: 2275 & 1450 & 1660 
13 : $1450 is min of: 2585 & 1450 & 1660 
14 : $1450 is min of: 1450 & 2175 & 1660 
15 : $1660 is min of: 1760 & 2175 & 1660 
16 : $1660 is min of: 2070 & 2175 & 1660 
17 : $1660 is min of: 2380 & 2175 & 1660 
18 : $1660 is min of: 2690 & 2175 & 1660 
19 : $1660 is min of: 3000 & 2175 & 1660 
20 : $1660 is min of: 3310 & 2175 & 1660 
21 : $1660 is min of: 2175 & 2900 & 1660 
22 : $1660 is min of: 2485 & 2900 & 1660 
23 : $1660 is min of: 2795 & 2900 & 1660 
24 : $1660 is min of: 3105 & 2900 & 1660 
25 : $1660 is min of: 3415 & 2900 & 1660 
26 : $1660 is min of: 3725 & 2900 & 1660 
27 : $1660 is min of: 4035 & 2900 & 1660 
28 : $1660 is min of: 2900 & 3625 & 1660 
29 : $1660 is min of:& 3625 & 1660 
30 : $1660 is min of: 3520 & 3625 & 1660 
31 : $1660 
32 : $1970 is min of: 310 & 725 & 1660 
+0

優れています。あなたは本当に私のもう一日の試練を救ったのですか?どうもありがとう。すてきな一日を :)。 – krishnakanth

関連する問題