我正在获取XML和RSS源,并将数据放入数据库。到目前为止,我遇到了两种不同的日期格式...
Wed, 21 Jul 2010 00:28:50 GMT
而且
2010-07-20T17:33:19Z
我相信会有更多的问题。我的postgresql数据库的日期是没有时区的时间戳。在php中是否存在现有的函数或者是否有一种过程可以将任何日期字符串转换为没有时区的时间戳(Y-m-d H:i:s)?
我正在获取XML和RSS源,并将数据放入数据库。到目前为止,我遇到了两种不同的日期格式...
Wed, 21 Jul 2010 00:28:50 GMT
而且
2010-07-20T17:33:19Z
我相信会有更多的问题。我的postgresql数据库的日期是没有时区的时间戳。在php中是否存在现有的函数或者是否有一种过程可以将任何日期字符串转换为没有时区的时间戳(Y-m-d H:i:s)?
使用 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
您无需进行任何转换。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
时间戳被认为是协调世界时(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
但如果你只需要时间戳,那就不需要它。