挑战是:
我的代码是:
<?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的初学者。
答案 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";
?>