Унифицировать форматы даты - как?

У меня есть два источника информации, и эти источники имеют даты в разных форматах.

Источник A Среда, 17 ноября 2010 г., 12:14:10 +0000 (из RSS-канала)

Источник B ГГГГ-ММ-ДД ЧЧ:ММ:СС (из mysql datetime)

Запрос: Я хотел бы упорядочить их по дате, чтобы получать только последние вхождения.

Но, что еще сложнее, те, которые хранятся в базе данных, должны учитывать ВРЕМЯ. Потому что в один и тот же день может быть создано несколько записей.

У меня есть контроль над форматом вывода mysql на выбор. У меня нет никакого контроля над выводом, поступающим из RSS-канала.

Это не кажется легким достижением, и мне интересно:

Что бы вы могли предложить здесь?

Обновление: я думал о следующем: работающий источник A следующим образом: а) создание массива для месяцев и конкретного номера месяца б) извлечение двух символов после первой запятой (или трех, если считать пробел) (день) c) Преобразовать «ноябрь» в число (используя ранее созданный массив); г) Получить 2010 (не знаю как); e) Поместите год слева, добавьте - - укажите месяц и -, поставьте день, добавьте 00:00:00

В это время они оба будут равны, и это могло бы помочь... Но я чувствую себя действительно глупо, делая все это... :s Разве нет умного способа? :)

Над - php(zend)/mysql

Большое спасибо, МЕМ


person MEM    schedule 21.11.2010    source источник


Ответы (1)


Если вы можете использовать PHP 5.3, я бы использовал DateTime::createFromFormat() для нормализации форматов даты в общий формат.

Для дат MySQL:

$date = DateTime::createFromFormat('Y-m-d H:i:s', '2010-11-17');
echo $date->format('Y-m-d H:i:s');

Для формата RFC 2822 это должно работать (еще не проверял):

$date = DateTime::createFromFormat('r', 'Wed, 17 Nov 2010 12:14:10 +0000');
echo $date->format('Y-m-d H:i:s');
person Pekka    schedule 21.11.2010
comment
Думаю, date('Y-m-d H:i:s', strtotime($date)) тоже подойдет, ‹5.3. - person deceze♦; 21.11.2010
comment
@deceze Я не был полностью уверен в формате r, но если подумать, strtotime(), вероятно, тоже может с этим справиться, правда - person Pekka; 21.11.2010
comment
Спасибо. Я не знал, что у нас есть такая вещь, как формат ISO. Я попробую и отпишусь о результатах. Большое спасибо. :) (@all ps- вы можете посмотреть мое обновление для развлечения :s ); - person MEM; 21.11.2010
comment
@MEM, да. ISO не совсем правильный, формат даты Wed, 17 Nov 2010.... указан в RFC 2822. Исправлено - person Pekka; 21.11.2010
comment
Только один вопрос: этот статический вызов кажется действительно хорошим. И Ему не нужны зависимости. Такое ощущение, что php — это ООП-язык, не только потому, что я могу создавать свои собственные классы, но и потому, что у php есть свои собственные, которые мы можем использовать. Мне интересно, если: а) Никто не ударит меня этим статическим вызовом, верно? б) где мы можем увидеть другие подобные функции ООП? - person MEM; 21.11.2010
comment
@MEM, статический вызов в этом случае подходит, он возвращает объект DateTime (примеры вручную делают это так же). Это немного исключение, было бы более уместно использовать для этого обычный конструктор, но createFromFormat появился позже как дополнение к библиотеке. б) Я не могу сейчас придумать пример, но я уверен, что есть некоторые - person Pekka; 21.11.2010
comment
@Pekka - о RFC - 2822 (спасибо за этот аддон!) Я изучу его подробнее. Я ничего не знаю о RFC. - person MEM; 21.11.2010
comment
@Pekka - Верите ли вы, что эти классы будут все более и более распространенными с развитием php? - person MEM; 21.11.2010
comment
@MEM да, я почти уверен, что DateTime - это будущее: он объектно-ориентированный, чистый и может хранить любую дату (даже до 1900 года), поэтому он не страдает от Ошибка 2038 года, как это делают обычные метки времени - person Pekka; 21.11.2010
comment
Я покупаю oop имеет будущее доказательство. Достаточно. Насчет бага... ничего не скажу. Я был здесь, когда вышло фиаско «Жук 2000 года». ;) Ну да ладно... Однако скептически буду читать. ;) Большое спасибо за ваши дополнительные комментарии. Я поставлю код для тестирования. Меня интересует эта паутина, 12... трансформация. :) - person MEM; 21.11.2010
comment
@Pekka, @deceze - у меня PHP 5.2.14. Не повезло мне. :( Будет ли решение deceze работать в этом случае, если на $date будет формат RFC 2822? - person MEM; 21.11.2010
comment
@MEM да, так и должно быть! Попробуйте. - person Pekka; 21.11.2010
comment
Только что сделал это. Хороший. Однако позор, что я не могу использовать новые функции PHP 5.3. - person MEM; 21.11.2010
comment
@MEM очень плохо! Но 5.3 рано или поздно придет к вам на сервер. - person Pekka; 21.11.2010