2013-11-02 6 views
-3

Хорошо, я пытаюсь выяснить, как добавить 1,5% к общему количеству из моей БД каждые 30 дней. Если мой баланс сегодня составляет 600 долларов, и я не заплатил его за 30 дней, он добавляет 1,5%, но если я не получу его в течение 60 дней, он добавит 1,5% к началу первого 30-дневного сборов. Вот что у меня есть ...php рассчитать последние сборы каждые 30 дней

if ($ invoicedate < = "$ 30_date") {$ late = (1.5/100) * $ total; }

поэтому я вытягиваю дату создания счета, проверяю, не превышает ли она 30 дней или более, и если да, то подсчитает правильную «новую» сумму как опоздание. Как я буду делать это каждые 30 дней независимо от того, как долго? Я действительно должен определить $ 60_date, $ 90_date и т. Д.?

ответ

0

Можете ли вы попробовать это?

$invoicedate = strtotime("2013/09/01"); 
$TodayDate = strtotime('today'); 

$timeDiff = abs($TodayDate - $invoicedate); 

$numberDays = $timeDiff/86400; // 86400 seconds in one day 

$numberDays = intval($numberDays); 

$noOfdaysToCheck ="30"; 

$total ="1000"; 

if ($numberDays >= $noOfdaysToCheck){$late = (1.5/100) * $total; } 

Каждые 30 дней сборы calc: Пожалуйста, обновите меня, это ваш ожидаемый?

 $invoicedate = strtotime("2013/07/01"); 
     $TodayDate = strtotime('today'); 

     $timeDiff = abs($TodayDate - $invoicedate); 

     $numberDays = $timeDiff/86400; // 86400 seconds in one day 

     $numberDays = intval($numberDays); 

     $noOfdaysToCheck ="30"; 

     $Fees ="600"; 

     if ($numberDays >= $noOfdaysToCheck){ 

       $Interval = $numberDays%$noOfdaysToCheck; 

       for($i=1;$i<=$Interval;$i++){ 
        $late = (1.5/100) * $Fees; 
        $Fees = FeesCalc($Fees); 

       } 
     } 

     $Fees = number_format($Fees, 2, '.', ''); 
     echo $Fees; 

     function FeesCalc($Fees){ 
      $late = (1.5/100) * $Fees; 
      return $TotalFees = $late+$Fees; 

     } 
+0

спасибо, но это просто проверяет, прошло ли оно 30 дней, мне нужно это сделать 1,5% каждые 30 дней. Так что за $ 600 после 30 дней стоит $ 9, теперь мне нужно это через 60 дней делать еще 1,5% на $ 609 – user2947187

+0

Это составляет сумму за $ сборы, за исключением случаев, когда я устанавливаю invoicedate до 2013/11/01, тогда $ fee дает мне $ 609 вместо $ 600, так как это не 30 дней, это всего лишь 1 день. Если я установил его на 2013/10/01, тогда он должен дать мне сумму в течение 30 дней, но она дает сумму в течение 60 дней. – user2947187

+0

Обновлено условие, пожалуйста, проверьте сейчас. –

0

Каждый раз, когда вы думаете, что вам нужно повторять переменные определенным образом, вам действительно нужно использовать цикл.

Предполагая, что $ InvoiceDate является отметка о времени, а также если вы хотите зарядить ежемесячно, а не через 30 дней:

$lateMonths = 1; 
$late = $total; 
while ($invoicedate <= strtotime(date('Y-m-d') . ' - '.$lateMonths . 'month')){ 
    $late = 101.5 * $late; 
} 
+0

ОК, кажется логичным. Каждый раз, когда я запускаю то, что у вас есть, он почему-то просто отключается от веб-сайта. $ invoicedate = 20131001 – user2947187

+0

ну возможно $ invoicedate> time() – jdog

+0

по какой-то причине этот фрагмент просто висит на веб-странице. – user2947187

Смежные вопросы