PHP конвертировать дату в сообщения, такие как вчера в 14:00 - обратное strtotime - PullRequest
3 голосов
/ 11 июля 2011

Я пытаюсь создать функцию, которая берет метку времени и генерирует «относительную» строковую дату, возможно, обратное strtotime!

Yesterday at 2pm
Yesterday at 3:15pm
Earlier Today at 9am
Today at 12pm
Today at 12:45pm
Tomorrow at 5pm
Monday at 9pm
Sunday at 12:55am
All dates older than a week:
Thu 7th Jul

В настоящее время у меня есть приведенный ниже код, и мне было интересно, как улучшитьЭто?Это не кажется очень эффективным и отсутствует некоторые функции.Что бы вы добавили?

  static public function timestampRelativeString($timestamp, $rounding=900) {
    if(!self::isValidTimeStamp($timestamp))
      return "Invalid Timestamp";

    //Round to (default) 15 mins
    $timestamp = floor($timestamp/$rounding)*$rounding;

    //Today
    if($timestamp<mktime(0, 0, 0, date("m"), date("d")-1, date("y")))
      return date("D jS M", $timestamp);
    elseif($timestamp<mktime(23, 59, 59, date("m"), date("d")-1, date("y")))
      return "Today at ".date("G:i", $timestamp);
    elseif($timestamp<time()))
      return "Earlier today at ".date("G:i", $timestamp);
    elseif($timestamp<mktime(23, 59, 59, date("m"), date("d"), date("y")))
      return "Today at ".date("G:i", $timestamp);
    elseif($timestamp<mktime(23, 59, 59, date("m"), date("d")+1, date("y"))) //Tomorrow
      return "Tomorrow at ".date("G:i", $timestamp);
    elseif($timestamp<mktime(23, 59, 59, date("m"), date("d")+7, date("y"))) //Next Week
      return "On ".date("l", $timestamp)." at ".date("G:i", $timestamp);
    else 
      return date("D jS M", $timestamp);
  }

Кто-нибудь знает сценарий, который уже делает это?Или очень похоже?

Большое спасибо за ваше время,

1 Ответ

3 голосов
/ 11 июля 2011

У этого имени много имен, включая nicetime и PrettyDate .Лучший способ сделать это - вывести фактическое время из PHP в div / span с идентификатором или идентифицирующим классом, а затем обработать клиентскую часть с помощью javascript (который затем может обновлять время, когда пользователь сидит на странице).

В любом случае, обращаясь к вашему вопросу, я бы посмотрел на классы обработки симпатичных дат, которые похожи (или точно) на те, которые вы видите в Facebook, Twitter и т. Д., Даже если вы делаете это вPHP вы можете в соответствии с функциональностью.

...