MySQL 已经知道如何使用本机解析许多不同类型的日期字符串STR_TO_DATE()功能与使用的格式字符串结合使用DATE_FORMAT().
所以,我根本不会让 PHP 参与这个过程,而是让 MySQL 自己解析输入。
您需要使用的格式字符串是%d/%m/%Y %h:%i %p
,其中%p
代表AM/PM
.
您可以在您的中使用整个表达式INSERT
语句,直接从 PHP 传递字符串,假设您已经验证了它们的格式。
INSERT INTO your_table (timestamp_column) VALUES (STR_TO_DATE('20/10/2014 05:39 PM', '%d/%m/%Y %h:%i %p'));
...将正确插入DATETIME
value 2014-10-20 17:39:00
进入你的桌子。
如果您确实更喜欢首先使用 PHP 执行此操作,请使用DateTime::createFromFormat()(PHP 5.3+) 使用格式字符串'd/m/Y H:i A'
$d = DateTime::createFromFormat('d/m/Y H:i A', '20/10/2014 05:39 PM');
var_dump($d);
class DateTime#2 (3) {
public $date =>
string(26) "2014-10-20 17:39:00.000000"
public $timezone_type =>
int(3)
public $timezone =>
string(15) "America/Chicago"
要从中获取 MySQL 格式的日期,
echo $d->format('Y-m-d H:i:s');
// 2014-10-20 17:39:00
如果您在非常不幸PHP 版本早于 5.3 的情况下,您可以获得类似的结果strptime()但您需要将其数组输出组装成 MySQL 的字符串格式。