我已检查输入日期是否为有效日期,现在需要检查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;
}
}
}
答案 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;
}
}