转换并插入两种日期格式MYSQL

时间:2013-08-17 07:49:54

标签: php mysql regex

我面临着管理日期的问题,有些日期通过了其他日期。我想为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个小时,这个日期让我头晕目眩。

1 个答案:

答案 0 :(得分:1)

在这种情况下,无需使用DateTime::createFromFormat,因为m/d/yyyyrecognized 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。在这种情况下,您必须分别使用nj。但是,就像我说的那样,让构造函数为你努力工作。