我该如何在php中编写这个特定条件?

时间:2016-05-11 06:13:49

标签: php if-statement conditional-statements

挑战是:

  • 如果在预期的返回日期或之前退回该书,则不 将收取罚款(即:罚款= 0)。
  • 如果在预期的返回日之后归还该书,但仍然如此 在与预期返回日期相同的日历月份和年份内, 罚款= 15个Hackos×(迟到的天数)。
  • 如果在预期的退货月份之后退还书籍但仍然如此 在与预期返回日期相同的日历年内, 罚款= 500 Hackos×(迟到的月数)。
  • 如果该书在日历年之后归还 预计会有10000个Hackos的固定罚款。

我的代码是:

<?php
$expectedDay   = "6";
$expectedMonth = "6";
$expectedYear  = "2015";

$returnDay     = "9";
$returnMonth   = "6";
$returnYear    = "2015";
if ($expectedDay >= $returnDay && $expectedMonth >= $returnMonth && $expectedYear >= $returnYear) {
    echo "Fine = 0";
}elseif ($expectedDay < $returnDay && $expectedMonth == $returnMonth && $expectedYear == $returnYear) {
    $fine = 15 * ($returnDay-$expectedDay);
    echo "Fine = ".$fine;
}elseif (($expectedDay <= $returnDay || $expectedDay >= $returnDay) && $expectedMonth < $returnMonth && $expectedYear == $returnYear) {
    $fine = 500 * ($returnMonth-$expectedMonth);
    echo "Fine = ".$fine;
}else{
    echo "Fine = 1000";
}

?> 

运行良好。但输入为:

时失败
$expectedDay   = "28";
$expectedMonth = "2";
$expectedYear  = "2015";

$returnDay     = "15";
$returnMonth   = "4";
$returnYear    = "2015";

我是如何写这个条件的?谢谢你提前。

注意:这不是商业逻辑。它只是练习目的。我是PHP的初学者。

5 个答案:

答案 0 :(得分:3)

这些方面的东西:

function calculateLateFees(DateTime $deadline, DateTime $returned) {
    if ($returned <= $deadline) {
        return 0;
    }
    if ($returned->format('Y') > $deadline->format('Y')) {
        return 10000;
    }
    if ($returned->format('n') > $deadline->format('n')) {
        return ($returned->format('n') - $deadline->format('n')) * 500;
    }
    return $deadline->diff($returned)->days * 15;
}

$deadline = new DateTime('2015-02-28');
$returned = new DateTime('2015-04-15');

echo calculateLateFees($deadline, $returned), ' Hackos';

答案 1 :(得分:1)

检查月份条件时,您不必比较日期。

df1=df[df.duplicated(keep=False)]

试试。

答案 2 :(得分:1)

首先,我必须说这是非常不公平的罚款计算。如果预计的日期是2016年12月31日并且该书于2017年1月1日返回怎么办?根据你的方法,因为它超过了两年的保证金,因此在一天的时间内将被罚款10000。

我建议你根据迟到的天数计算罚款。

$lateDays = date_diff($expectedDate, $returnDate, false);

if ($lateDays > 0) {

   if ($lateDays < 30)
      $fine = 15 * $lateDays
   else
      if ($lateDays > 365)
         $fine = 10000
      else            
         $fine = 500 * $lateDays / 30

}

答案 3 :(得分:0)

if($returnYear > $expectedYear){
    $fine = 1000;
}
else{
    if($returnMonth > $expectedMonth ){
         $fine = 500 * ($returnMonth-$expectedMonth);
    }
    else{
         if($returnDay>$expectedDay){
               $fine = $returnDay - $expectedDay;
          }
          else{
               $fine = 0;
          }

    }
}

echo $fine;

以上逻辑构建时考虑到跨越数月需要完整的月成本示例:

如果预期返回日期是2016年4月28日,实际返回日期是02/05/2016,则自月份更改后,以下算法需要很好的@complete月份。

如果您想要将月/年计算的精确天差考虑在内,那么我们可以一起编写不同的逻辑

答案 4 :(得分:0)

第一个php代码,plz dont downvote很多:)

<?php
$expectedDay   = "6";
$expectedMonth = "6";
$expectedYear  = "2015";

$returnDay     = "9";
$returnMonth   = "6";
$returnYear    = "2015";

$expectedate=$expectedYear.'-'.$expectedMonth.'-'.$expectedDay;
$returndate=$returnYear.'-'.$returnMonth.'-'.$returnDay;

$expected=date_create($expectedate);
$return=date_create($returndate);

$interval=date_diff($expected, $return);
$valor=$interval->format('%R%a');

if ($valor>0) {

    if ($returnMonth==$expectedMonth && $returnYear==$expectedYear) echo "Fine=".(15*$valor);
    if ($returnMonth!=$expectedMonth && $returnYear==$expectedYear) echo "Fine=".(500*($returnMonth-$expectedMonth));
    if ($returnYear!=$expectedYear) echo "Fine=1000";

} else echo "Fine=0";
?>