我面临着管理日期的问题,有些日期通过了其他日期。我想为mysql生成一个可插入的日期。有两种可能的发布日期
yyyy-mm-dd //should go without conversion
m/d/yyyy // should be converted
我正在使用这个
$date = $_REQUEST['date'];
$date_regex = '/(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d/';
if(preg_match($date_regex, $date)){
$date = DateTime::createFromFormat('m/d/Y',$date)->format('Y-m-d');}
问题
我意识到这个正则表达式在
之类的日期失败了2/5/2013
但一直在为
工作 12/12/2013
所以我删除了它但仍然
DateTime::createFromFormat('m/d/Y',$date)->format('Y-m-d');
对于m / d / yyyy ,也失败了
过去6个小时,这个日期让我头晕目眩。
答案 0 :(得分:1)
在这种情况下,无需使用DateTime::createFromFormat
,因为m/d/yyyy
是recognized date formats之一(请参阅“美国月,日和年”)。只需将其转换为DateTime
对象,让构造函数处理格式并忘记正则表达式:
$date = $_REQUEST['date'];
$datetime = new DateTime($date);
$datex = $datetime->format('Y-m-d');
DateTime::createFromFormat('m/d/Y',$date)
这样的日期2/5/2013
失败的原因是因为您强制它专门为'm / d / Y'而且该日期不符合该模式。您可以看到所有日期格式here的列表。具体来说,m
期望有一个前导零(如02
),所以当你给它一个没有它时,它将无法识别它。同样适用于d
。在这种情况下,您必须分别使用n
和j
。但是,就像我说的那样,让构造函数为你努力工作。