2017-05-21 12 views
0

我有這一行更新代碼,比較當前日期(date1)與date2「$ date2 = ew_StdCurrentDateYear();」那應該是dd.mm.year,但它只是比較日期和月份,那些沒有考慮當年。 問題是一年前的條目等於$ compdates == 1(如果條目是在日期前31.03.2017)PHP行更新有一個小缺陷

如何更改代碼以實際獲取它以比較年份?

// Row Updating event 
function Row_Updating($rsold, &$rsnew) { 
     $date1 = $rsnew["data"]; 
     $date2 = ew_StdCurrentDateYear(); 
     $compdates = CompareDates($date1, $date2); 
     if (($compdates == 1) && ($rsnew["suma"] == $rsnew["cota"])) { 
     $rsnew["suma_acor"] = $rsnew["cota"] * 50/100; 
     $rsnew["suma_filiala"] = $rsnew["cota"] * 50/100; 
     $rsnew["suma_cotiz"] = 0; 
     } 
     if (($compdates == 2) && ($rsnew["suma"] == $rsnew["cota"])) { 
     $rsnew["suma_acor"] = $rsnew["cota"] * 60/100; 
     $rsnew["suma_filiala"] = $rsnew["cota"] * 40/100; 
     $rsnew["suma_cotiz"] = 0; 
     } 

//31.03 every year 
function ew_StdCurrentDateYear() { 
    return date('Y/03/31'); 
} 

//compares the calendar date with 31.03 every year 
function CompareDates($date1, $date2) { 
list($year, $month, $day) = preg_split('/-/', $date1); 
$new_date1 = sprintf('%04d%02d%02d', $year, $month, $day); 
list($year, $month, $day) = preg_split('/\//', $date2); 
$new_date2 = sprintf('%04d%02d%02d', $year, $month, $day); 

if ($new_date1 <= $new_date2) { 
    return 1; 
    } else { 
    return 2; 
} 
} 

回答

0

嘗試使用PHP DateTime類。這可以解析大多數日期格式,然後允許直接比較。

$date1 = '2016-03-31'; 
$date2 = '2017/03/31'; 

function compareDates($date1, $date2) 
{ 
    $date1 = new DateTime($date1); 
    $date2 = new DateTime($date2); 

    return ($date1 <= $date2) ? 1 : 2; 
}