2012-04-23 4 views
0

Я получаю внешнюю отправку RSS-сообщений на другом сайте, я заметил, что все они имеют другой формат даты публикации. Некоторые использует форматирование, как это:Использование функции PHP strtotime()

2012-04-09T08:23:07Z 

Fri, 06 Apr 2012 01:25:43 0000 

Есть еще много формат, но я просто показываю вам два примера.

Теперь я хочу, чтобы все имело единый формат, поэтому я использую strtotime(). Вот мой код:

$date = "2012-04-09T08:23:07Z"; 
date("F d, Y", strtotime($date)); 
/* Result: April 09, 2012 */ 

Моя проблема вот второй формат Fri, 06 Apr 2012 01:25:43 0000

Существует 0000 на последнем, который делает StrToTime() действовать странно.

$date = "Fri, 06 Apr 2012 01:25:43 0000"; 
date("F d, Y", strtotime($date)); 
/* Result: April 06, 0000 */ 

Очевидно, что результат должен быть апрель 06,2012.

Мой вопрос здесь в том, что я не могу позволить strtotime() действовать странно, когда он обнаруживает формат, который имеет 0000 в последний раз. есть идеи как это сделать? Ваша помощь будет принята с благодарностью! Благодаря! :)

Спасибо!

+1

Вы обнаружили какие-либо другие форматы datetime, которые вызывают проблемы? Если это единственный, вы можете просто использовать специальные строки case, которые заканчиваются на «0000». –

ответ

1

Я уверен, что у вас есть вопрос о форматировании:

Fri, 06 Apr 2012 01:25:43 0000 

Обратите внимание на два пробела перед 0000? Это не совпадение. Возможно, это оригинал:

Fri, 06 Apr 2012 01:25:43 +0000 

Что генерируется с помощью gmdate(DATE_RFC822). В URI символ + часто переводится в пробел. Я думаю, это твоя проблема.

+0

Да, я заметил, что тоже есть + символ до 0000, но когда я сохранил его в базе данных, символ + ушел, потому что я попытался выполнить mysql_real_escape_string()? – PinoyStackOverflower

+1

Нет, 'mysql_real_escape_string' не избегает символов' + ', так что, возможно, это происходит, когда вы извлекаете его из XML? –

+0

@Jack: u рок .. !! – mithunsatheesh

1

Как насчет просто зачистки «0000»? Что-то вроде:

$ date = str_replace ("0000", "", $ date);

+0

Это умный :) – PinoyStackOverflower

+1

RFC822 не указывает GMT как обязательное условие, поэтому он также может заканчиваться '0800'. –

1

попробовать это:

<?php 
$date = "Fri, 06 Apr 2012 01:25:43 0000"; 

if (strtotime($date) !== false) 
{ 
$timestamp = strtotime($date); 
    echo date("F d, Y", $timestamp); 
} 
else 
{ 
    echo "error"; 
} 

?> 

на сегодняшний день $ = "Пт, 06 апр 2012 1:25:43 0000"; выдает ошибку.

$ date = "Пт, 06 апр 2012 01:25:43"; дает выход.