我正在尝试从具有以下dd / mm / yyyy hh:mm:ss AM / PM格式的字符串的日期和时间插入mysql datetime字段:
20/10/2014 05:39 PM
20/10/2014 05:39 AM
我知道MYSQL时间戳格式是yyyy-mm-dd hh:mm:ss或0000-00-00:00:00:00
因此,如果我这样做:
$s = substr("20/10/2014 05:39 PM", 0, 10);
$h = date("G:i", strtotime($s));
list($day, $month, $year, $hour, $minute) = split('[/ :]', "20/10/2014 05:39 PM");
echo $d1me = $year . '-' . $month. '-' . $day . ' ' . $h;
我懂了 2014-10-20 19:00
所以我想date_default_timezone_set()函数有问题,如何解决这个问题并获得预期的结果?
20/10/2014 05:39 PM -> 2014-10-20 17:39:00
20/10/2014 05:39 AM -> 2014-10-20 05:39:00
怎么做?
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
值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的字符串格式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句