检查日期问题

时间:2014-02-14 17:54:10

标签: php codeigniter validation date

我正在努力做一些日期验证。我创建了3个不同的功能,它们都可以工作但不是特殊情况。

我做的最后一件事是:

public function valid_date($date, $format = 'd/m/Y'){
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;
}

我从php网站获得了这个功能,就像我认为它比我的更好用我替换它。

用户必须输入的日期格式为dd / mm / YYYY,数据库格式为yyyy-mm-dd 00:00:00

当我输入此无效日期时:30/30/1996该功能将其识别为有效日期。然后我有另外一个函数来爆炸“/”并使它像数据库格式“ - ”,并在该函数中它给我错误:

DateTime :: __ construct():无法解析位置6(0)处的时间字符串(1996-30-30):意外字符'

public function explodingDates($date){      
    list($day,$month,$year) = explode('/', $date);
    $newDate = $year.'-'.$month.'-'.$day;
    return (new \Datetime($newDate));
}

我在这里烧我的大脑,不知道还有什么可以做验证。它还必须准备接收任何类型的输入(如“askhdakjdh”,“123213”,“1.25 / 269”)并返回无效日期。

提前致谢

1 个答案:

答案 0 :(得分:1)

不要爆炸日期字符串。使用DateTime::createFromFormat()创建DateTime对象,并使用format()方法将其转换为其他格式:

function ConvertToMySQLDate($datestr) {
    $d = DateTime::createFromFormat('d/m/Y', $datestr);
    $valid = $d && $d->format('d/m/Y') == $datestr;
    if ($valid) {
        return $d->format('Y-m-d');
    }
    return FALSE;
}

上述函数接受格式dddd-mm-yyyy的日期字符串,检查它是否有效,并以MySQL格式(yyyy-mm-dd)返回日期。如果提供的日期无效,则返回false。

使用示例:

var_dump(ConvertToMySQLDate('30/30/1996')); // bool(false)
var_dump(ConvertToMySQLDate('13/12/1996')); // string(10) "1996-12-13"

Demo