Как известно, в Twitter и Facebook даты сообщений проставляются не стандартно, а показывают сколько прошло времени с момента публикации: «30 секунд назад» или «2 часа назад». Сегодня я покажу как это можно реализовать у себя с помощью PHP.
Для пользователей WordPress все совсем просто, вставьте этот код в место вывода даты:
<?php echo human_time_diff(get_the_time('U'), current_time('timestamp')) . ' назад'; ?>
Для других случаев используйте этот код:
function showDate($date) // $date --> время в формате Unix time
{
$stf = 0;
$cur_time = time();
$diff = $cur_time - $date;
$seconds = array('секунда', 'секунды', 'секунд');
$minutes = array('минута', 'минуты', 'минут');
$hours = array('час', 'часа', 'часов');
$days = array('день', 'дня', 'дней');
$weeks = array('неделя', 'недели', 'недель');
$months = array('месяц', 'месяца', 'месяцев');
$years = array('год', 'года', 'лет');
$decades = array('десятилетие', 'десятилетия', 'десятилетий');
$phrase = array($seconds, $minutes, $hours, $days, $weeks, $months, $years, $decades);
$length = array(1, 60, 3600, 86400, 604800, 2630880, 31570560, 315705600);
for ($i = sizeof($length) - 1; ($i >= 0) && (($no = $diff / $length[$i]) <= 1); $i--) ;
if ($i < 0) $i = 0;
$_time = $cur_time - ($diff % $length[$i]);
$no = floor($no);
$value = sprintf("%d %s ", $no, getPhrase($no, $phrase[$i]));
if (($stf == 1) && ($i >= 1) && (($cur_time - $_time) > 0)) $value .= time_ago($_time);
return $value . ' назад';
}
function getPhrase($number, $titles)
{
$cases = array (2, 0, 1, 1, 1, 2);
return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}
Enjoy!
если так выводить, то и обновлять значения надо. на js не должно быть сложно
Это имеет смысл, если только ваш сайт обновляется с частотой твиттера
Поищите, подобное решение на js легко найти
нет, это имеет смысл всегда, если написано «опубликовано x секунд/минут/часов назад» и пока я сижу на сайте, это значение не должно остаться прежним.
это не от часто ты публикаций зависит, а от самой сути подобного вывода времени.
да и че искать, надо будет, сам напишу
А с какой частотой этот код обновляет данные? У меня получилось (что, в общем-то, странно) заюзать Ваш код. Последний твит выводится в «шапке». Так я вижу отправленный 2 часа назад, отправленный только что — не вижу
Так с какой-какой частотой?
С частотой обновления страницы.
В том-то и дело что нет...
Можно я Вам тут скопирую код, который был в шаблоне и как я его заменила на Ваш? Одной мне не справиться...
Попробуйте, но не уверен, что это что-то прояснит, вы не понимаете самого принципа такого подсчета времени. Этот код тупо высчитывает разницу во времени между временем публикации статьи и временем открытия страницы. Как там оно у вас работает с твитами не представляю, но догадываюсь, что вы там что-то перемудрили.
Да нет, время-то оно как раз считает, только показывает не самый последний твит.
Этот код никак не связан с вашими твитами, поверьте, он просто считает разницу во времени и ничего более.
Понимаете, есть два варианта замены: или оно мне выводит последний твит как отправленный 4 десятилетия назад
или не обновляет данные после перезагрузки страницы.
Такие дела...
Да, я таки додумалась до этого
Поняла, что где-то есть указание, с какой частотой менять твиты и Ваш прекрасный код тут ни при чём.
Спасибо за помощь: теперь минуты, часы и дни нормально отображаются.
Отличная вещь! Как раз пригодилась