PHP行更新有一个小缺陷

时间:2017-05-21 20:00:09

标签: php mysql

我有这行更新代码,用于将当前日期(date1)与date2" $ date2 = ew_StdCurrentDateYear();"进行比较。应该是dd.mm.year,但它只比较日期和月份,那些没有考虑当前年份。 问题是一年前的条目等于$ compdates == 1(如果条目的日期是在2017年3月31日之前)

如何更改代码以实际比较年份呢?

// 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;
}
}

1 个答案:

答案 0 :(得分: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;
}