将任何日期字符串转换为没有时区的时间戳

kei*_*ith 16 php sql postgresql datetime

我正在获取xml和rss feed并将数据放入数据库.到目前为止,我遇到了两种不同的日期格式......

Wed, 21 Jul 2010 00:28:50 GMT
Run Code Online (Sandbox Code Playgroud)

2010-07-20T17:33:19Z
Run Code Online (Sandbox Code Playgroud)

我相信会有更多.我的postgresql数据库的日期是没有时区的时间戳.在PHP中是否存在现有函数,或者是否存在将任何日期字符串转换为没有时区的时间戳的过程(Ymd H:i:s)?

Sar*_*raz 22

使用datestrtotime:

$date = date('Y-m-d H:i:s', strtotime('Wed, 21 Jul 2010 00:28:50 GMT'));
echo $date;
Run Code Online (Sandbox Code Playgroud)

结果:

2010-07-21 05:28:50
Run Code Online (Sandbox Code Playgroud)

.

$date = date('Y-m-d H:i:s', strtotime('2010-07-20T17:33:19Z'));
echo $date;
Run Code Online (Sandbox Code Playgroud)

结果:

2010-07-20 22:33:19
Run Code Online (Sandbox Code Playgroud)


Mat*_*ood 12

您根本不需要转换它.PostgreSQL应该自动转换:

postgres=# create table test_tz (f1 timestamp without time zone);
CREATE TABLE
postgres=# insert into test_tz (f1) values ('Wed, 21 Jul 2010 00:28:50 GMT');
INSERT 0 1
postgres=# insert into test_tz (f1) values ('2010-07-20T17:33:19Z');
INSERT 0 1
postgres=# select f1 from test_tz;
         f1          
---------------------
 2010-07-21 00:28:50
 2010-07-20 17:33:19
Run Code Online (Sandbox Code Playgroud)

  • 有关Postgres认可的日期/时间格式的详细信息[此处](http://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT). (4认同)

Gor*_*don 5

时间戳被认为是UTC.

$dt = new DateTime('Wed, 21 Jul 2010 00:28:50 GMT');
echo $dt->format('U'); // 1279672130
Run Code Online (Sandbox Code Playgroud)

与时间戳相同

$dt = new DateTime('Wed, 21 Jul 2010 02:28:50 CEST');
echo $dt->format('U'); // 1279672130
Run Code Online (Sandbox Code Playgroud)

请注意,U格式化选项需要PHP5.3.在Date String中提供时区标识符时,DateTime对象会识别时区,因此当您在GMT DateTime实例上调用以下内容时

echo $dt->format('Y-m-d H:i:s');
Run Code Online (Sandbox Code Playgroud)

它会回来2010-07-21 00:28:50.您可以使用它的setTimezone()方法更改DateTime对象的时区.

$dt = new DateTime('Wed, 21 Jul 2010 02:28:50 GMT+2');
$dt->setTimezone(new DateTimeZone('UTC'));
echo $dt->format('Y-m-d H:i:s'); // 2010-07-21 00:28:50
Run Code Online (Sandbox Code Playgroud)

但如果您只需要时间戳,则不需要时间戳.