我正努力做一些日期验证。我已经创建了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 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")并返回无效日期。
提前感谢
发布于 2014-02-14 18:03:05
不要爆日期线。使用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"https://stackoverflow.com/questions/21786241
复制相似问题