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

16

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

Wed, 21 Jul 2010 00:28:50 GMT

而且

2010-07-20T17:33:19Z

我相信会有更多的问题。我的postgresql数据库的日期是没有时区的时间戳。在php中是否存在现有的函数或者是否有一种过程可以将任何日期字符串转换为没有时区的时间戳(Y-m-d H:i:s)?

3个回答

21

使用 strtotime 函数和 date 函数:

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

结果:

2010-07-21 05:28:50

.

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

结果:

2010-07-20 22:33:19

11

您无需进行任何转换。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

4
有关PostgreSQL认可的日期/时间格式的详细信息,请点击此处查看:http://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT。 - Milen A. Radev

5

时间戳被认为是协调世界时(UTC)。

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

与之相同的时间戳是

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

请注意,U格式选项需要PHP5.3及以上版本。在日期字符串中提供时区标识符时,DateTime对象会识别时区,因此当您在GMT DateTime实例上调用以下内容时:
echo $dt->format('Y-m-d H:i:s');

它将返回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

但如果你只需要时间戳,那就不需要它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接