2008-11-03 1 views
2

Дата публикации, возвращенная с Twitter Поиск API Atom Feed как 2008-11-03T21: 30: 06Z, который необходимо преобразовать в «X секунд/минут/часов/дней назад» для показа, как давно твиттер сообщения были опубликованы.PHP Преобразование HTML Отформатированная дата

Подумайте, это можно сделать с помощью функции php date(), используя значение DATE_ATOM?

ответ

3
function time_since($your_timestamp) { 
    $unix_timestamp = strtotime($your_timestamp); 
    $seconds = time() - $unix_timestamp; 
    $minutes = 0; 
    $hours = 0; 
    $days = 0; 
    $weeks = 0; 
    $months = 0; 
    $years = 0; 
    if ($seconds == 0) $seconds = 1; 
    if ($seconds> 60) { 
     $minutes = $seconds/60; 
    } else { 
     return add_s($seconds,'second'); 
    } 

    if ($minutes >= 60) { 
     $hours = $minutes/60; 
    } else { 
     return add_s($minutes,'minute'); 
    } 

    if ($hours >= 24) { 
     $days = $hours/24; 
    } else { 
     return add_s($hours,'hour'); 
    } 

    if ($days >= 7) { 
     $weeks = $days/7; 
    } else { 
     return add_s($days,'day'); 
    } 

    if ($weeks >= 4) { 
     $months = $weeks/4; 
    } else { 
     return add_s($weeks,'week'); 
    } 

    if ($months>= 12) { 
     $years = $months/12; 
     return add_s($years,'year'); 
    } else { 
     return add_s($months,'month'); 
    } 

} 

function add_s($num,$word) { 
    $num = floor($num); 
    if ($num == 1) { 
     return $num.' '.$word.' ago'; 
    } else { 
     return $num.' '.$word.'s ago'; 
    } 
} 

echo time_since('2008-11-03T21:30:06Z'); 
+0

Спасибо Джек. Все, что мне нужно, было объединено в пару функций. Ура! – 2008-11-03 22:53:33

1

strtotime будет обрабатывать формат даты, предоставляя вам временную метку unix. Затем вы можете выполнить алгоритмы на How do I calculate relative time?, чтобы получить результат.

0

Это легко с помощью DateTime функциональности, введенной в PHP 5.2:

$posted = new DateTime('2008-11-03T21:30:06Z'); 
$now  = new DateTime(); 
$interval = $posted->diff($now); 
echo $interval->format('%a days'); // You can change this to be whatever format you like 

Example