2015-11-02 3 views
0

Это не так просто, как strtotime() ...PHP IMAP получить дату от электронной почты во время эпохи

Я возвращаю даты письма с PHP IMAP. Когда я вернусь дата, я получаю это форматирование:

21 May 2015 20:48:36 -0400 
Fri, 15 May 2015 00:13:12 +0000 
Fri, 7 Aug 2015 07:11:42 -0400 (EDT) 
Fri, 4 Sep 2015 11:03:15 -0400 
Mon, 10 Aug 2015 22:04:10 +0000 
Tue, 14 Jul 2015 12:54:47 -0400 
Sun, 21 Jun 2015 10:49:06 +0000 
Fri, 12 Jun 2015 17:35:26 +0000 
Thu, 27 Aug 2015 11:47:55 -0400 
Mon, 20 Jul 2015 12:43:45 -0400 
Fri, 18 Sep 2015 07:47:04 -0400 (EDT) 
etc. 

Как вы можете видеть, даты не совсем последовательны. В одной из дат нет имени дня (Пт). Некоторые из этих дат имеют тег (EDT), а остальные нет.

Я пробовал использовать strtotime($date), но я считаю, что, поскольку в некоторых из них есть часовой пояс, он ворует дату.

Есть ли способ конвертировать эти очень странные времена в эпоху?

+0

Из документов * "Каждый параметр этой функции используется часовой пояс по умолчанию, если часовой пояс не указан в этом параметре Будьте осторожны не использовать разные временные зоны в каждом параметре, если это не предназначено. См. date_default_timezone_get() по различным способам определения часового пояса по умолчанию. "* –

ответ

1

Вы можете очистить свой вход перед обработкой его в качестве временных строк:.

$input = "21 May 2015 20:48:36 -0400 
Fri, 15 May 2015 00:13:12 +0000 
Fri, 7 Aug 2015 07:11:42 -0400 (EDT) 
Fri, 4 Sep 2015 11:03:15 -0400 
Mon, 10 Aug 2015 22:04:10 +0000 
Tue, 14 Jul 2015 12:54:47 -0400 
Sun, 21 Jun 2015 10:49:06 +0000 
Fri, 12 Jun 2015 17:35:26 +0000 
Thu, 27 Aug 2015 11:47:55 -0400 
Mon, 20 Jul 2015 12:43:45 -0400 
Fri, 18 Sep 2015 07:47:04 -0400 (EDT)"; 

$output = ''; 

$lines = explode("\n", $input); 

foreach($lines as $line) { 
    $output .= preg_replace('/(\w{3},)|(\(\w{3}\))/', '', $line)."\n"; 
} 

echo $output; 
+0

Отлично! Спасибо! Все, что мне было нужно, это часть регулярного выражения, которая работала чудесно. Благодаря! – ntgCleaner

Смежные вопросы