PHP检查日期差异为落后日期

时间:2017-07-11 08:43:22

标签: php codeigniter validation date codeigniter-3

我已检查输入日期是否为有效日期,现在需要检查date_start必须在date_end之前的落后日期。

我已经尝试了其他几个选项无济于事,我真的不想在可能的情况下比较输入的子字符串。

输入来自html5 date,使用chrome格式为dd / mm / yyyy

class MY_Form_validation extends CI_Form_validation {

    public $CI;

    public function date_format($date) {
        if (($timestamp = strtotime($date)) === false) {
            return false;
        }
    }

    //error message stored in caller module language folder
    public function backward_date($date_start, $date_end) {

        $date_1 = new DateTime($date_start);
    $date_2 =  new DateTime($date_end);

    if ($date_1 > $date_2 == true) {
        return false;
    }
    else {
        return true;
    }
    }

}

3 个答案:

答案 0 :(得分:0)

尝试这个

public function backward_date($date_start, $date_end) {
    $ts1 = strtotime($date_start);
    $ts2 = strtotime($date_end);
    $seconds_diff = $ts2 - $ts1;
    return ($seconds_diff>0) ? true : false;
}

答案 1 :(得分:0)

这里的问题是DateTime无法解析来自' dd / mm / yyyy'到有效的DateTime对象。

以下是收到的错误:

  

PHP警告:未捕获异常:DateTime :: __ construct():无法解析时间字符串(27/10/2017)

为了解决这个问题,您可以使用DateTime模型中的createFromFormat()方法来解析具有指定格式的字符串。

$date_1 = DateTime::createFromFormat('d/m/Y', $date_start);

所以你的方法就像:

public function backward_date($date_start, $date_end) 
{
    $date_1 = DateTime::createFromFormat('d/m/Y', $date_start);
    $date_2 = DateTime::createFromFormat('d/m/Y', $date_end);

    return $date_1 <= $date_2;
}

希望它有所帮助。

答案 2 :(得分:0)

尝试这个......为我工作。

 function date_calculate($start_date, $end_date) {

   $dStart = new DateTime($start_date);
   $dEnd = new DateTime($end_date);
   $days=0;

  if ($dStart < $dEnd) {
    $dDiff = $dStart->diff($dEnd);
    $dDiff->format('%R');
    $days = $dDiff->days;
    return $days;
   } else {        
    return $days;
   }
 }