我遇到了管理日期的问题,有些日期通过了,有些则没有。我想为 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/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
。但是,就像我说的,让构造函数为您完成艰苦的工作。
关于php - 转换并插入两种日期格式MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18286458/