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

标签 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 个小时里,这个约会的事情让我头晕目眩。

最佳答案

在这种情况下,不需要使用 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。但是,就像我说的,让构造函数为您完成艰苦的工作。

关于php - 转换并插入两种日期格式MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18286458/

相关文章:

java - 尝试概括正则表达式

php - 调用未定义的函数 sqlite_libversion()

mysql - Yii2查询mysql,添加查询中不存在的列

php - cakephp - 检查 session 是否设置

regex - bash sed/grep 提取两个词之间的文本

ruby - 如何从 ruby​​ 中的字符串中提取路径(在第一个和最后一个 fwd 斜杠之间)

php - 如何在 PHP 中同时执行多个 mysql 查询?

php - 未定义索引 : on login (php)

php - php isset($ _ GET ['post_id'])问题

MySQL MAX 函数用于不使用 GROUP BY 子句的类别