-1

我注意到 Facebook、Twitter 和许多其他网站都在对用户帖子和评论使用相对日期和时间字符串描述。

例如,“评论写于大约 3 个月前”而不是“评论写于 2012 年 9 月 20 日”。我决定在我的网站上做同样的事情。在我的网站中,我需要显示 1 天前,2 天前,3 天前,...... 1 周前,2 周前,.... 1 个月前,2 个月前,...... . 1 年前,2 年前... 等等。

我已经有了用户注册日期,需要用当前日期和时间检查它,并且需要在我的主页上以上述样式显示它。

在我的数据库中,用户注册的日期格式是这样的 .. '2012-09-23 09:11:02'

任何人都可以帮助我在 php 中构建这个脚本......它会非常受欢迎。

谢谢你。

4

3 回答 3

1

试试这个

function time_ago($time) {

   $periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
   $lengths = array("60","60","24","7","4.35","12","10");

   $now = time();

   $difference = $now - $time;
   $tense = "ago";

   for($j = 0; $difference >= $lengths[$j] && $j < count($lengths)-1; $j++) {
        $difference /= $lengths[$j];
   }

   $difference = round($difference);

   if($difference != 1) {
        $periods[$j].= "s";
   }

   return "$difference $periods[$j] 'ago' ";
}
于 2012-09-26T07:36:51.810 回答
1

试试下面的代码,

function time_elapsed_since ($postedDateTime){

    $time = time() - $postedDateTime; // to get the time since that moment

         $tokens = array (
                      31536000 => 'year',
                      2592000 => 'month',
                      604800 => 'week',
                      86400 => 'day',
                      3600 => 'hour',
                      60 => 'minute',
                      1 => 'second'
                  );

                  foreach ($tokens as $unit => $text) {
                      if ($time < $unit) continue;
                      $numberOfUnits = floor($time / $unit);
                      return $numberOfUnits.' '.$text.(($numberOfUnits>1)?'s':'');
                  }

    }

用法:

time_elapsed_since($postedDateTime).' ago'; // 2012-09-23 09:11:02 format
于 2012-09-26T07:27:15.077 回答
0

我猜他们正在使用 unixtime 即自 1970 年以来的秒数(这是标准的)。我建议您的日期也应该保持这种格式。如果他们使用的是 unix 时间,您可以在 PHP 中使用以下日期函数将其转换为上述格式:

<?php
date('Y-m-t H:i:s', $facebookTime);

问候,凯文

于 2012-09-26T07:41:21.767 回答