Сделать PHP / MySQL Timestamp более привлекательным - PullRequest
1 голос
/ 03 июля 2010

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

2010-06-30 12:36:08

Очевидно, что для веб-приложения это не очень привлекательно для просмотра пользователями.Итак, используя некоторые функции 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, которая может делать то, что я хочу, это будет здорово.

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

Джек

Ответы [ 2 ]

6 голосов
/ 03 июля 2010

Лучше всего это делать на стороне клиента на уровне представления.Вот решение 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 дней назад.

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

1 голос
/ 03 июля 2010
$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 дней".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...