конвертировать любую строку даты в метку времени без часового пояса

Я получаю xml и rss-каналы и помещаю данные в базу данных. До сих пор я сталкивался с двумя разными форматами даты …

Wed, 21 Jul 2010 00:28:50 GMT 

А также

 2010-07-20T17:33:19Z 

Я уверен, что их будет больше. Моя база данных postgresql для даты – это метка времени без часового пояса. Существует ли существующая функция в php или есть ли процедура для преобразования любых строк даты в метку времени без часового пояса (Ymd H: i: s)?

Использовать date с strtotime :

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

Результат:

 2010-07-21 05:28:50 

,

 $date = date('Ymd 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('Ymd H:i:s'); 

он вернется 2010-07-21 00:28:50 . setTimezone() менее, вы можете изменить часовой пояс объекта DateTime с setTimezone() метода setTimezone() .

 $dt = new DateTime('Wed, 21 Jul 2010 02:28:50 GMT+2'); $dt->setTimezone(new DateTimeZone('UTC')); echo $dt->format('Ymd H:i:s'); // 2010-07-21 00:28:50 

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