0

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

4

1 回答 1

1

在这种情况下,没有必要使用DateTime::createFromFormat,因为m/d/yyyy它是公认的日期格式之一(参见“美国月、日和年”)。只需将其转换为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' 并且该日期不符合该模式。您可以在此处查看所有日期格式的列表。具体来说,m期望有一个前导零(如02),所以当你给它一个没有它时,它不会识别它。也一样d。在这种情况下,您将不得不分别使用nj。但是,就像我说的,让构造函数为您完成艰苦的工作。

于 2013-08-17T07:56:23.820 回答