字符串到日期时间 CET/CEST

String to datetime with CET/CEST

我在将字符串转换为 PHP 中的日期时间时遇到了一些困难。

字符串可以同时以 CEST 和 CET 作为时区结尾,所以我想我必须在此之前以某种方式拆分?我不想存储 CET 或 CEST。我只想将日期转换为日期时间。

这是字符串:

Dec 27 2017, 22:46:15 CETDec 27 2017, 22:46:15 CEST

而且,字符串中的空格是   而不是常规空格。所以在 HTML 中它看起来像这样:

Dec 27 2017, 22:46:15 CETDec 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

你应该使用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