【问题标题】:Converting a unix time stamp to twitter/facebook style将 unix 时间戳转换为 twitter/facebook 样式
【发布时间】:2011-07-13 12:38:36
【问题描述】:

我正在尝试将 unix 时间戳转换为像 facebook 和 twitter 一样显示。例如,当您在 twitter/facebook 上看到推文或 cmets 时,您会看到日期/时间显示如下:

“2 分钟前”或“2 天前”或“2 周前”

有谁知道让它像这样工作的任何功能。我猜这将是一个定制的。

非常感谢任何帮助

【问题讨论】:

标签: php datetime timestamp unix-timestamp string-to-datetime


【解决方案1】:

如果您使用的是 php,您可能想尝试以下由 Matt Jones 发布的函数

http://www.mdj.us/web-development/php-programming/another-variation-on-the-time-ago-php-function-use-mysqls-datetime-field-type/

// DISPLAYS COMMENT POST TIME AS "1 year, 1 week ago" or "5 minutes, 7 seconds ago", etc...
function time_ago($date,$granularity=2) {
    $date = strtotime($date);
    $difference = time() - $date;
    $periods = array('decade' => 315360000,
        'year' => 31536000,
        'month' => 2628000,
        'week' => 604800, 
        'day' => 86400,
        'hour' => 3600,
        'minute' => 60,
        'second' => 1);

    foreach ($periods as $key => $value) {
        if ($difference >= $value) {
            $time = floor($difference/$value);
            $difference %= $value;
            $retval .= ($retval ? ' ' : '').$time.' ';
            $retval .= (($time > 1) ? $key.'s' : $key);
            $granularity--;
        }
        if ($granularity == '0') { break; }
    }
    return ' posted '.$retval.' ago';      
}

【讨论】:

  • 就是这样!完全是我想要的。
【解决方案2】:

我也喜欢jquery timeago plugin,它会在设定的计时器上自动更新所有时间字段,因此如果用户在页面上停留一段时间,它就会是最新的。您需要在渲染时将 unix 时间转换为 ISO 8601 格式,但我相信有一个 php 函数。

【讨论】:

    【解决方案3】:

    简单的脚本,只需几秒钟的时间并且效果很好

    function twitter_time($time) {
      $delta = time() - strtotime($time);
      if ($delta < 60) {
        return '30sec ago';
      } else if ($delta < 120) {
        return '1m ago';
      } else if ($delta < (60 * 60)) {
        return floor($delta / 60) . 'm ago';
      } else if ($delta < (120 * 60)) {
        return '1h ago';
      } else if ($delta < (24 * 60 * 60)) {
        return floor($delta / 3600) . 'h ago';
      } else if ($delta < (48 * 60 * 60)) {
        return '1d ago';
      } else if ($delta < (86400*7)) {
        return floor($delta / 86400) . 'd ago';
      } else if ($delta < (2*86400*7)) {
        return '1week ago';
      } else if ($delta < (2592000)) {
        return floor($delta / (86400*7)) . 'weeks ago';
      } else if ($delta < (2*2592000)) {
        return '1mon ago';
      } else if ($delta < (31104000)) {
        return floor($delta / 2592000) . 'mon ago';
      } else if ($delta < (2*31104000)) {
        return '1year ago';
      } else {
        return number_format(floor($delta / 31104000)) . 'years ago';
      } 
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-08
      • 2013-04-07
      • 2014-10-26
      • 1970-01-01
      • 2023-03-18
      • 2020-10-19
      • 2013-07-02
      • 2020-06-01
      • 1970-01-01
      相关资源
      最近更新 更多