Intereting Posts
Выделение слов в Javascript – Почему они не будут выделены после полной загрузки страницы? Как я могу определить, какая версия CakePHP – это проект? Ошибка вызова функции undefined imagecreatetruecolor в PHP и pChart Создание ключа PHP RSA Получите правильный IP-адрес посетителя через CloudFlare вывод json-массива в php как переместить текущую запись в другую таблицу и удалить текущую запись Допустимый размер памяти 134217728 байт исчерпан (пытался выделить 4294967296 байт) Способ избежать использования псевдонима Apache для включения HTML-ресурсов, таких как CSS Настройка веб-проекта PHP, инфраструктуры == и === операторы в php PDO Parameterized Query – повторное использование именных заполнителей? Неустранимая ошибка: уровень вложенности слишком глубокий – рекурсивная зависимость? Пример использования MySQL LEFT JOIN PHP Как заменить апострофы текстовой области клиентов с помощью escape-символа

Создание временной метки PHP / MySQL выглядит более привлекательно

Поэтому в основном я сейчас выбираю временную метку из моей базы данных MySQL. В базе данных временная метка выглядит так:

2010-06-30 12:36:08

Очевидно, что для webapp это не очень привлекательно для просмотра пользователями. Итак, используя некоторые функции CodeIgniter, я сделал это немного лучше.

 <h4 class="timestamp"> <?php // Quickly calculate the timespan $post_date = mysql_to_unix($row->date); $now = time(); echo timespan($post_date, $now);?> ago </h4> 

Если вы не выполняете CodeIgniter, все стандартные PHP, кроме echo timespan() . CodeIgniter просто повторяет это как «английский». Итак, пример вывода:

2 Months, 4 Weeks, 5 Hours, 20 Minutes ago

Это все хорошо и хорошо, но я хочу, чтобы все выглядело приятнее … слишком много запятых, и все это слишком долго (я знаю, я придирчив …). Я бы хотел :

  1. Если промежуток времени меньше одного дня, выход должен быть 7 hours, 33 minutes ago
  2. Если промежуток времени меньше недели, выход должен быть 4 days ago
  3. Если промежуток времени меньше месяца, выход должен быть 2 weeks, 6 days ago
  4. Если период времени превышает месяц, выход должен быть 4 months ago
  5. В случае случайного периода, превышающего год, выпуск должен быть Over a year ago

Как вы можете видеть, в настоящее время я использую функцию CodeIgniter, чтобы упростить это, но если есть какая-то собственная функция PHP, которая может делать то, что я хочу, это будет потрясающе.

Спасибо за вашу помощь!

разъем

Это лучше всего сделать на стороне клиента на уровне презентации. Вот решение JS:

Timeago – это плагин jQuery, который упрощает поддержку автоматического обновления нечетких временных меток (например, «4 минуты назад» или «около 1 дня назад»).

Timeago превратит все элементы abbr в class timeago и временную метку ISO 8601 в title :

 <abbr class="timeago" title="2008-07-17T09:24:17Z">July 17, 2008</abbr> 

в нечто подобное:

 <abbr class="timeago" title="July 17, 2008">about a year ago</abbr> 

Чтобы преобразовать дату в формат ISO 8601, вы можете сделать что-то вроде этого:

 <?= date("c", $post_date) ?> 

Примеры:

Вы открыли эту страницу меньше минуты назад. (Это будет обновляться каждую минуту. Подождите.)

Последнее изменение этой страницы: 11:47, 6 апреля 2010.

Райан родился 31 год назад.

 $ts = new DateTime(); $ts->setTimestamp($my_timestamp); $cur = new DateTime(); $difference = $cur->diff($ts); if ($difference->format("%a") == 0) $out = $difference->format("%h hours %i minutes"); elseif ($difference->format("%a") < 7) $out = $difference->format("%a days"); elseif ($difference->format("%m") == 0) { $days = $difference->format("%a"); $out = sprintf("%d weeks %d days", floor($days / 7), $days % 7); } elseif ($difference->format("%y") == 0) $out = $difference->format("%m months"); else $out = "over a year"; 

Вам нужно будет внести несколько корректировок, если вы не хотите, чтобы такие вещи, как «1 день».