使用CET / CEST的字符串到日期时间

时间:2017-12-28 13:54:44

标签: php mysql sql datetime data-conversion

我在使用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

1 个答案:

答案 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