конвертировать любую строку даты в метку времени без часового пояса - PullRequest
16 голосов
/ 21 июля 2010

Я получаю 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 голосов
/ 21 июля 2010

Используйте 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
12 голосов
/ 21 июля 2010

Вам не нужно конвертировать его вообще. 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
5 голосов
/ 21 июля 2010

Временные метки считаются 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

Но если вам просто нужна временная метка, она не нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...