2017-07-11 70 views
0

我检查过输入日期是有效日期,现在需要检查date_start必须在date_end之前的落后日期。PHP查看落后日期的日期差异

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

输入使用带有格式DD/MM/YYYY铬是从HTML5日期

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

} 
+2

可能重复[比较两个日期](https://stackoverflow.com/questions/3847736/comparing-two-dates) – BenRoob

回答

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

这里的问题是,DateTime不能从解析字符串'dd/mm/yyyy'转换为有效的DateTime对象。

这里是所接收到的错误:

PHP的警告:未捕获的例外:日期时间:: __构建体():解析失败时间字符串(27/10/2017)

为了修复此问题,您可以使用DateTime模型中的​​方法以指定格式解析字符串。

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

希望它能帮助。

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