我在使用PHP将字符串转换为日期时遇到了一些困难。
字符串可以以CEST和CET作为时区结束,所以我想在此之前我必须以某种方式分裂?我不打算存储CET或CEST。我只希望将日期转换为日期时间。
这是字符串:
Dec 27 2017, 22:46:15 CET
和Dec 27 2017, 22:46:15 CEST
但是,字符串中的空格是
而不是常规空格。所以在HTML中它看起来像这样:
Dec 27 2017, 22:46:15 CET
和Dec 27 2017, 22:46:15 CEST
我想将它转换为:2017-12-27 22:46:15
,然后将其插入我的数据库。我想出了如何在SQL查询中更改它(我的列名为 lastlogin ),我这样做:
STR_TO_DATE(SUBSTRING_INDEX(REPLACE(lastlogin,char(160),' '),'C',1), '%b %d %Y, %T')
但我真的很想在PHP中这样做。那么假设我的日期变量名为$lastlogin
,我将如何将该SQL逻辑应用于我的PHP? SQL中的char(160)
是
,我不确定PHP。
编辑:
我将它存储在$ character-> lastlogin变量中。 (注意:显然它是 
而不是
)
$character->lastlogin = str_replace(' ', ' ', $character->lastlogin);
$datetime = DateTime::createFromFormat('M d Y, H:i:s e', $character->lastlogin);
$character->lastlogin = $datetime->format('Y-m-d H:i:s');
给我这个错误:Fatal error: Uncaught Error: Call to a member function format() on boolean
答案 0 :(得分:0)
您应该使用DateTime::createFromFormat
// CET Timezone (+01:00)
$datetime = DateTime::createFromFormat('M d Y, H:i:s e', 'Dec 27 2017, 22:46:15 CET');
// change timezone to UTC (+00:00) (if necessary)
$datetime->setTimeZone(new DateTimeZone('UTC'));
$output = $datetime->format('Y-m-d H:i:s');
// output: 2017-12-27 21:46:15