Я получаю xml и RSS ленты и помещаю данные в базу данных. Я столкнулся с двумя различными форматами даты до сих пор...
Wed, 21 Jul 2010 00:28:50 GMT
И
2010-07-20T17:33:19Z
Я уверен, что будет больше. Моя postgresql база данных для даты является меткой времени без часового пояса. Существует ли существующая функция в php или там процедура для преобразования любых строк даты для добавления метки времени без часового пояса (Y-m-d H:i:s)?
Используйте date
с strtotime
:
$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
. Вы можете изменить часовой пояс объекта DateTime с помощью метода setTimezone ()
.
$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
Но если вам просто нужна метка времени, она не нужна.